91名师指路-头部
91名师指路

java 集合(list,set,map)三者之间的关系和区别

由于某些原因,现在不支持支付宝支付,如需要购买源码请加博主微信进行购买,微信号:13248254750

一:先上一张关系图,让大家看的更明白。

备注:其中红色部分为实现,其他地方均为接口。


二:各自的特点。

  1. List 有序,可重复
  • ArrayList
  • 优点: 底层数据结构是数组,查询快,增删慢。
  • 缺点: 线程不安全,效率高

  • Vector
  • 优点: 底层数据结构是数组,查询快,增删慢。
  • 缺点: 线程安全,效率低

  • LinkedList
  • 优点: 底层数据结构是链表,查询慢,增删快。
  • 缺点: 线程不安全,效率高

    Set 无序,唯一
          HashSet
          底层数据结构是哈希表。(无序,唯一)
          如何来保证元素唯一性?
          1.依赖两个方法:hashCode()和equals()
            
          LinkedHashSet
          底层数据结构是链表和哈希表。(FIFO插入有序,唯一)
          1.由链表保证元素有序
          2.由哈希表保证元素唯一

        
          TreeSet
          底层数据结构是红黑树。(唯一,有序)
          1. 如何保证元素排序的呢?
              自然排序,比较器排序
          2.如何保证元素唯一性的呢?
          根据比较的返回值是否是0来决定

三:我们怎么来使用。

针对Collection集合我们到底使用谁呢?

唯一吗?

是 > set > 排序吗 ? 

                           是:TreeSet或LinkedHashSet

                               否:HashSet

否 > list > 要安全吗?

                           是:vector

                           否:ArrayList 或 LinkedList

四:Map。

有序:TreeMap

无序:HashMap和HashTable


HashMap 

jdk1.7 底层为数组+单链

jdk1.8 底层为数组+单链+红黑树,默认长度为16,为什么是16不是其他的数字呢,只要是2的次幂就可以了。负载因子为0.75,当链表的长度大于8时,转为红黑树。


LinkedList

  LinkedList是基于链表的,它是一个双向链表,每个节点维护了一个prev和next指针。同时对于这个链表,维护了first和last指针,first指向第一个元素,last指向最后一个元素。LinkedList是一个无序的链表,按照插入的先后顺序排序,不提供sort方法对内部元素排序。


HashSet

  HashSet是基于HashMap来实现的,操作很简单,更像是对HashMap做了一次“封装”,而且只使用了HashMap的key来实现各种特性,而HashMap的value始终都是PRESENT。

  HashSet不允许重复(HashMap的key不允许重复,如果出现重复就覆盖),允许null值,非线程安全。





2019-10-23 12:39:03     阅读(1198)

名师出品,必属精品    https://www.91mszl.com

联系博主    
用户登录遮罩层
x

账号登录

91名师指路-底部