一:Collection.remove()与ArrayList.remove()方法的不同
1. Collection
中只能根据元素移除
2.ArrayList
可以根据元素删除
,
也可以根据下标删除
二:完成ArrayList去重的案例
观察以下代码
,
并得出代码执行后的结果
Dog d = new Dog("小黑",5);
List<Dog> ls=new ArrayList<Dog>();
ls.add(d);
ls.add(d);
ls.add(d);
System.out.println(ls.size());
得出结果后推导原因:
List
接口的特点之一就是可重复
问:如何在ArrayList出完成去除重复值的功能
答:
使用
contains方法进行判断,判断新的集合newLs是否包含指定的元素,如果包含,那么不添加新集合中,如果不包含,那么添加到
新集合中
public static List<Dog> singleList(List<Dog> oldLs) {
List<Dog> newLs = new ArrayList<Dog>();// 去除重复值之后的集合
for (Dog d : oldLs) {// 遍历需要去除重复值的集合
if (!newLs.contains(d)) {// 如果在新集合中不存在
newLs.add(d);// 加入到新集合中
}
}
return newLs;
}
写完方法之后再调用之前的案例查看结果 :
Dog d = new Dog("小黑",5);
List<Dog> ls = new ArrayList<Dog>();
ls.add(d);
ls.add(d);
ls.add(d);
List<Dog> newLs = singleList(ls);
System.out.println("集合:"+newLs);
System.out.println("长度:"+newLs.size());
输出结果:
集合:[Dog [name=小黑, age=5]]
长度:1
换种方式在试:
Dog d1 = new Dog("小黑",5);
Dog d2 = new Dog("小黑",5);
Dog d3 = new Dog("小黑",5);
List<Dog> ls = new ArrayList<Dog>();
ls.add(d1);
ls.add(d2);
ls.add(d3);
List<Dog> newLs = singleList(ls);
System.out.println("集合:"+newLs);
System.out.println("长度:"+newLs.size());
输出结果
:
集合:[Dog [name=小黑, age=5], Dog [name=小黑, age=5], Dog [name=小黑,
age=5]]
长度:3
-
== 与 equals 的区别:
==
比较的对象在内存中的地址
equals
比较的是对象的内容(通过重写方法,可以自定义判断规则)
在没有重写
equals
的情况下 默认使用的是
Object
类的
equals
比较的是对象在内存中的
地址
重写
Dog
的
equals
方法 :
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Dog other = (Dog) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
重写了equals方法,判断只要名字相同,就认为是同一只狗
重新执行上面的代码,输出结果:
集合:[Dog [name=小黑, age=1]]
长度:1
讲解原理: