【无标题】常用集合及其底层数据结构

1)  List

分为 arraylist和linkedlist

arraylist基于动态数组实现 ,concurrent并发包下CopyOnWriteArrayList 线程安全

特征:1.允许元素为空 2、查询效率高,增删效率低 3、线程不安全

linkedlist基于双链表实现

特征:1、允许元素为空 2、插入和删除效率高,查询慢 3、既能实现栈后进先出,也能实现队列 先进先出 ,也能实现双向队列,因为其提供了...first()和...last()方法

2)  Map

2.1 HashMap 以key-value键值对形式存储,允许key为空,也允许value为空,底层数据结构是数组+链表+红黑树

查询、插入、删除效率都高

put()存储流程:

1、计算待新增的key的hash值 2、判断node【】数据是否为空或者数据长度为0的情况,则需要进行初始化 3、根据hash值通过位运算定计算出Node数组的下标,判断该数组第一个Node节点是否有数据,没有则插入新值,有的话,则根据具体情况进行操作:

如果该Node结点的 key (即链表头结点)与待新增的key相等(==或者equals),则直接覆盖值,最后返回旧值;。如果该结构是树形,则按照树的方式插入新值;

·如果是链表结构,则判断链表长度是否大于阈值8,如果>=8并且数组长度>=64才转为红黑树,如果>=8并且数组长度<64则进行扩容; ·如果是链表结构,则判断链表长度是否大于阈值8,如果>=8并且数组长度>=才转为红黑树,如果>=8并且数组长度<则进行扩容;

·如果不需要转为红黑树,则遍历链表,如果找到key和hash值同时相等,则进行覆盖返回旧值,如果没有找到,则将新值插入到链表的最后面(尾插法); 5.判断数组长度是否大于阈值,如果是则进入扩容阶段。

2.2 HashTable

是一个哈希散列表,可使用重入锁Synchronized实现线程安全,key和value都不能为空,被高性能的ConcurrentHashMap代替

2.3 TreeMap

是一个有序结合,底层数据结构是红黑树结构,每个元素都存放在红黑树节点上,默认使用自然排序,也可以自定义排序,线程不安全

特征:key不允许为空,value可以多个为空

2.4 LinkedHashMap

可以保证插入顺序,访问顺序,线程不安全

3)  Set

3.1 HashSet

用来存储没有重复元素的集合类,并且是无序的,底层使用HashMap机制,所以线程不安全

3.2 TreeSet

有序并且没有重复的集合类,线程不安全,自然升序排序和自定义排序

3.3 LinkedHashSet

可以保证插入顺序或者访问顺序,没有重复元素,线程不安全

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值