1. 程式人生 > >ArrayList類去除重複值

ArrayList類去除重複值

ArrayList類去除重複值

思路:建立新集合方式

  1. 明確返回值型別,返回ArrayList
  2. 明確引數列表ArrayList 

步驟:

  1. 建立新集合
  2. 根據傳入的集合(老集合)獲取迭代器
  3. 遍歷老集合
  4. 通過新集合判斷是否包含老集合中的元素,如果包含就不新增,如果不包含就新增

實現:

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()方法。