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

猜你喜欢

转载自blog.csdn.net/qq_40298054/article/details/84891391