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