java集合

集合类的继承体系


       Collection:单列集合的跟接口。两个子接口是java.util.List和java.util.Set。其中List的特点是元素有序、元素可重复,set的特点是元素无序、元素不可重复。List的实现类主要有java.util.ArrayList和java.util.LinkedList;Set的实现类有java.util.HashSet和java.util.LinkedHashSet。

集合框架底层的数据结构总结

1.List

  • ArrayList:
           底层结构是Object数组,ArrayList的数组初始长度为10,每次扩容为原数组长度的1.5倍(是使用位运算实现,右移一位就是除以2,newCapacity = oldCapacity + (oldCapacity >> 1)),当数组容量大小大于初始容量的时候就会进行扩容。
  • LinkedList:底层使用双向链表实现。如果索引值离链表头比较近,就从节点头部遍历,如果索引值大于链表大小的一半,那么将从尾结点开始遍历。
  • Vector:底层结构是Object数组。

2.Map

  • HashMap:
          1.JDK8 之前,HashMap 由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突 而存在的(“拉链法”解决冲突)。
          2.JDK8 以后,在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8 )时,将链表转化为红 黑树,以减少搜索时间。
          3.不是用红黑树来管理hashmap,而是在hash值相同的情况下(且重复数量大于8),用红黑树来管理数据。 红黑树相当于排序数据。可以自动的使用二分法进行定位。性能较高。 一般情况下,hash值做的 比较好的话基本上用不到红黑树。
          4.当个数不多的时候,直接链表遍历更方便,实现起来也简单。而红黑树的实现要复杂的多。 因为红黑树需要进行左旋,右旋操作, 而单链表不需要, 以下都是单链表与红黑树结构对比。 如果元素小于8个,查询成本高,新增成本低 如果元素大于8个,查询成本低,新增成本高。
          5.使用无参数构造方法创建HashMap对象,将加载因子设置为默认的加载因子,loadFactor=0.75F。带有参数构造方法,传递哈希表的初始化容量和加载因子。
          6.初始化容量长度为16。当数据容量超过 当前最大容量*loadfactor,且新建的Entry刚好落在一个非空的桶上时触发扩容机制,将其容量扩大为2倍(使用位运算,左移一位)。

  • LinkedHashMap
          LinkedHashMap 继承自 HashMap,所以它的底层仍然是基于拉链式散列结构即由数组和链表或红黑树组成。另外,LinkedHashMap 在上面结构的基础上,增加了一条双向链表,使得上面的结构可以保持键值对的插入顺序。同时通过对链表进行相应的操作,实现了访问顺序相关逻辑。

  • HashTable:   数组+链表组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的。默认构造函数,容量为 11,加载因子为 0.75。

  • TreeMap:红黑树(自平衡的排序二叉树)

2.set

  • HashSet:无序,唯一,底层基于HashMap实现,具有数组,链表,红黑树三种结构特点。
  • LinkedHashSet:
          具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。此实现与 HashSet的不同之外在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,即按照将元素插入到 set 中的顺序(插入顺序)进行迭代。 LinkedHashSet 继承与 HashSet,并且其内部是通过 LinkedHashMap 来实现的。
  • TreeSet(有序,唯一):红黑树(自平衡的排序二叉树)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值