ArrayList類去除重複值
阿新 • • 發佈:2018-12-15
ArrayList類去除重複值
思路:建立新集合方式
- 明確返回值型別,返回ArrayList
- 明確引數列表ArrayList
步驟:
- 建立新集合
- 根據傳入的集合(老集合)獲取迭代器
- 遍歷老集合
- 通過新集合判斷是否包含老集合中的元素,如果包含就不新增,如果不包含就新增
實現:
public static ArrayList getSingle(ArrayList list) { ArrayList newList = new ArrayList<>(); //1,建立新集合 Iterator it = list.iterator(); //2,根據傳入的集合(老集合)獲取迭代器 while(it.hasNext()) { //3,遍歷老集合 Object obj = it.next(); //記錄住每一個元素 if(!newList.contains(obj)) { //如果新集合中不包含老集合中的元素 newList.add(obj); //將該元素新增 } } return newList; }
重點注意:上述程式碼對於集合中非自定義物件可以實現,但是對於自定義物件有一定要求!
請注意contains()方法
public boolean contains(Object o) { return indexOf(o) >= 0; } public int indexOf(Object o) { if (o == null) { for (int i = 0; i < size; i++) if (elementData[i]==null) return i; } else { for (int i = 0; i < size; i++) if (o.equals(elementData[i])) return i; } return -1; }
注:contains()方法中進行比較時,使用的是equals()方法;而對於自定義物件,如果沒有重寫equals()方法則比較的是物件地址值,所以無法正確匹配。如果想要使用該方法,自定義物件必須要重寫equals()方法。
同樣使用equals()方法的好友remove()方法
public boolean remove(Object o) { if (o == null) { for (int index = 0; index < size; index++) if (elementData[index] == null) { fastRemove(index); return true; } } else { for (int index = 0; index < size; index++) if (o.equals(elementData[index])) { fastRemove(index); return true; } } return false; }
所以使用該方法刪除自定義物件時,也需要注意重寫equals()方法。