Java集合

java里有Collection跟Map,List、Queue、Set是继承于Collection,Map是继承AbstractMap

Collection实现了Iterator,可以执行迭代器遍历

List常用的有ArrayList(底层是数组,排序有序,随机查询快,增删慢,线程不安全,扩容为1.5倍+1)、Vector(底层是数组,线程安全,扩容为2倍)、LinkedList(底层是双向循环链表,增删快,读写较慢,线程不安全)

Queue,队列,提供两端的操作,实际上跟List差不多

Set,存放不重复的数据,主要有HashSet(内部使用HashMap实现,存取速度快,排序无序)、TreeSet(采用二叉树原理,内部是TreeMap的SortedSet,存入的对象可实现Comparable支持排序存储,不可重复)、LinkedHashSet(内部是LinkedHashMap)

备注:Set实际上都是对Map 的封装

 

Map,有HashMap、HashTable、TreeMap

HashMap(数组+链表+红黑树):键不可重复,值可以重复,线程不安全,底层采用hash表实现,线程不安全,可使用ConcurrentHashMap获得线程安全的能力。jdk1.8后,数组的元素改为链表或红黑树,当链表长度超过8就变为红黑树,查询的时间复杂度从o(n)变为o(logN)。

-散列表采用扰动函数,利用存入对象的hashcode右移16位后与原hashcode做异或运算,混合原hashcode的高低位,增加随机性。

-初始化容量,寻找传入容量的2的倍数的最小值

-负载因子,默认为0.75f,当散列表超过四分之三会扩容,减少hash碰撞,如果需要更高性能,可以空间换时间,调小负载因子以达到减少碰撞

-扩容元素拆分,当数组长度不足,会将元素拆分到新的数组,jdk1.8后拆分后不需要重新计算

用到的红黑树是一种平衡二叉搜索树(左子树小于右子树;左右子树高度不超过1,切左右子树都是平衡二叉树),相对于AVL树,红黑树是一种弱平衡(所有节点都是红色或黑色,根节点是黑色,所有叶子都是黑色(NIF),节点到每个叶子所经过的节点都包含相同数量黑色节点)

红黑树在插入的时候通过节点旋转,左旋、右旋,来让树更加平衡

查找的时候递归查询,左子树比右子树小

插入,按照查找的方式,找到空的子树,作为红色节点插入,然后根据父节点、叔父节点的颜色、位置进行不同的调整

删除是最复杂的,根据删除节点有多少NIF节点处理

 

​​

 

hashtable:继承于Dictionary,线程安全、key和value都不能为null,并发性能不如ConcurrentHashMap

ConCurrentHashMap:实现思路与HashMap差不多,使用了分段锁来保证线程安全。数组元素采用Segment段组成,Segment集成了ReentrantLock。concurrencyLevel默认是16,代表默认有16个Segment,理论上支持16个线程并发写,concurrencyLevel初始化后不可变,即ConcurrentHashMap不能扩容

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值