一、Collection接口:
1.所定义的方法:
因此对于Colletion的子接口Set和List的实现类:HashSet、 ArrayList、LinkedList都实现了这些方法。
2.关于equals和hashCode方法的使用:
在什么情况下需要重写equals和hashCode方法呢?
(1)容器中放的是自定义类的对象,且该类作为索引或key。
(2)需要使用到remove、contains方法或容器是Map接口的实现类。
如何重写?
(1)该自定义类需要重写equals和hashCode方法。方法前标注为@Override
(2)一般是对对象的成员属性进行比较判断
3.关于Iterator迭代器及增强的for循环
Collection中的Iterator()方法返回一个Iterator迭代器,优点是可以进行安全的remove操作,不会引起线程安全问题。
增强的for循环不可进行remove操作,也不能获取当前循环index下标。并不推荐使用,除非仅仅需要简单便利集合并读出其中内容
4.关于Set
特点:无序 、元素不可重复 。因此在add方法执行时,存在equals方法为true的元素,则无法加入到Set中。因此需要重写要使用set的对象所对应类的equals方法
retainAll():求交集,这个方法可以用于求两个集合中相同的元素
addAll():将一个set加入到另一个set中,并去除重复元素。
这里看一个例子,说明元素重复的问题:
这里的Name类的equals方法已经重写了,所有成员变量的值都相等才为true,而String类本身就重写了Object的equals方法,比较字符序列,而不是引用值,因此"hello"和new Name("f1","f2")这两个元素不能被重复加入。