1、List:一种知道索引位置的集合。可以有多个元素引用相同的对象,即允许重复。
2、Set:不允许重复的集合。知道某物存在于集合中,不允许重复。
3、Map:用键值对存储数据。两个key可以引用相同的对象,但是key不能重复。
HashSet:保存对象不重复,对象要复写 equals,hashCode方法
4、hashSet对象的addAll方法,可以复制其他集合 的元素,效果就跟一个一个加进去一样的
5、引用相等性:引用到堆上同一个对象的两个引用是相等的。这两个引用的hashCode值也是相同的。
6、对象相等性:堆上的两个不同对象在意义上相同
7、HashSet通过Hashcode来快速存取数据,通过hashCode可以很快的计算出对象所在的位置,不必一个个从头找。但是hashCode相同不能保证对象是相等的,因为hashCode使用的杂凑算法可能刚好让不同对象传回来相同的杂凑值。越糟糕的杂凑算法越容易碰撞。HashSet在对比的时候,发现同样的hashCode有多个对象,会使用equals方法判断是否完全相同。所以,hashCode用来缩小寻找成本,最终还是equals来判断是否是相同的对象。
8、有相同的hashCode值两个对象不一定相同,两个对象相等,hashCode值一定相同。
9、所以equals被覆盖过,hashCode()方法也必须被覆盖。
TreeSet:防止重复,保持有序
10、TreeSet对象需要实现Comparable接口,或者传入实现的Comparator接口的对象来构造TreeSet对象。让它知道如何排序存储。