Collection接口
Collection接口
List接口:存储有序,可重复的数据
|-----ArrayList:list接口的主要实现类;线程不安全,效率高;底层使用Object[] elementData储存
|-----LinkedList:对于频繁的插入,删除操作,使用此类效率比ArrayList高;底层使用双向链表储存
|-----Vector:List接口的古老实现类;线程安全,效率低;底层使用Object[] elementData储存
Set接口:存储无序,不可重复的数据
|-----HashSet:作为Set接口的主要实现类;线程不安全;可以储存null值
|-----LinkedHashSet:作为HashSet的子类;遍历内部数据是,可以按照添加时的顺序进行遍历,对于频繁的遍历操作,LinkedHashSet效率高于HashSet
|-----TreeSet:可以按照添加对象的指定属性,进行排序
注意:
-
向Set(主要指HashSet和LinkedHashSet)接口中添加数据,其所在类一定要重写hashCode()和equals()
-
TreeSet:
2.1 向TreeSet中添加数据,要求是相同类的对象
2.2 两种排序方式:自然排序(实现Comparable接口)和定制排序(实现Comparator接口)
-
添加元素(以HashSet为例)
①
向HashSet中添加元素a,首先调用元素a所在类的hashCode(),计算元素a的哈希值,将哈希值用某种算法计算出再HashSet底层数组中存放的索引位置,再判断该位置上是否已有元素:②
如果位置没有其他元素,则元素添加成功如果位置上有其他元素b(或以链表形式存在多个元素),比较元素a和元素b的哈希值:
③
如果哈希值不同,则元素a添加成功如果哈希值相同,则调用元素a所在类的equals()判断最终是否相等