Collection接口

Collection接口

List接口:存储有序,可重复的数据

  |-----ArrayList:list接口的主要实现类;线程不安全,效率高;底层使用Object[] elementData储存

  |-----LinkedList:对于频繁的插入,删除操作,使用此类效率比ArrayList高;底层使用双向链表储存

  |-----Vector:List接口的古老实现类;线程安全,效率低;底层使用Object[] elementData储存

Set接口:存储无序,不可重复的数据

  |-----HashSet:作为Set接口的主要实现类;线程不安全;可以储存null值

   |-----LinkedHashSet:作为HashSet的子类;遍历内部数据是,可以按照添加时的顺序进行遍历,对于频繁的遍历操作,LinkedHashSet效率高于HashSet

  |-----TreeSet:可以按照添加对象的指定属性,进行排序

注意

  1. 向Set(主要指HashSet和LinkedHashSet)接口中添加数据,其所在类一定要重写hashCode()和equals()

  2. TreeSet:

    2.1 向TreeSet中添加数据,要求是相同类的对象

    2.2 两种排序方式:自然排序(实现Comparable接口)和定制排序(实现Comparator接口)

  3. 添加元素(以HashSet为例)


    向HashSet中添加元素a,首先调用元素a所在类的hashCode(),计算元素a的哈希值,将哈希值用某种算法计算出再HashSet底层数组中存放的索引位置,再判断该位置上是否已有元素:


    如果位置没有其他元素,则元素添加成功

    如果位置上有其他元素b(或以链表形式存在多个元素),比较元素a和元素b的哈希值:


    如果哈希值不同,则元素a添加成功

    如果哈希值相同,则调用元素a所在类的equals()判断最终是否相等

posted @ 2021-08-04 15:45  oneMoe  阅读(44)  评论(0编辑  收藏  举报