集合相关:

1.list

有序             可重复               可为null
 
 
ArrayList(非同步 动态数组 随机访问)       基于数组                 线程不安全         多并发情况,出现elementData数组越界
LinkedList(非同步 双向链表 移除)          基于链表                 线程不安全         
Vector(同步 动态数组 线程安全)                               线程安全          
Stack(继承Vector 实现后进先出的堆栈)。
 

2.set

有序           非重复                                   可为null
HashSet           hashcode实现                               不重复无序;可为唯一null、
TreeSet           基于TreeMap二叉树                             不允许放入null值;特点是它不保证该顺序恒久不变、
LinkedHashSet         hashCode值来决定元素的存储位置,链表维护元素的次序、 遍历性能比HashSet好,但是插入时性能稍微逊色于HashSet
EnumSet。

 

3.map

key与value之间的一一对应关系
HashTable         线程安全           key-value:key不为null,vale不为null             HashTable继承Dictionary类,HashTable采用”拉链法”实现哈希表不过性能比HashMap要底。
                                                          锁住整个对象,线程增加的时候,性能急剧下降。
                                                          不支持迭代时修改。会抛异常。
 
TreeMap          线程不安全           key-value:key不为null,vale可为null              有序散列表,实现SortedMap接口,底层通过 红黑树实现。
WeakHashMap。                    key-value:都可以为null                      强软弱虚四种状态 gc相关 再下次被回收前被回收 ----不太清 有时间可以多了解
LinkedHashMap        线程不安全          key-value:都可以为null                     通过维护一个运行于所有条目的双向链表,LinkedHashMap保证了元素迭代的顺序。
                                                         该迭代顺序可以是插入顺序或者是访问顺序
 
 
concurrentHashMap
            线程安全 key-value:      key不为null,vale不为null                   1.7<= 底层采用分段的数组+链表实现 分桶策略 默认16份 jdk1.8之后 使用cas+synchronized 支持迭代的时候修改,不会抛出异常。                                                                    1.7 segment分段锁实现 链表 1.8 数组+链表 引入红黑树 (链表-->红黑树) node+cas+synchronized 扩容的时候,会将key分为高                                                                                                                              位,和低位,低位复制到原先的index索引,高位|+旧扩容大小位运算,为新位置索引
 
HashMap
            线程不安全           key-value:都可以为null                    1.7 数组+链表
                                                           1.8 数组+链表+红黑树
 
含有数据>64,链表长度>8 转红黑树
  1.源码 modCount++
  2.key碰撞,出现覆盖
  3.可见性,做不到
  4.死循环
    1.7 头插法,多线程并发的情况下 扩容是 会造成死循环
    1.8 尾插法, 多线程并发的情况下,扩容 会造成数据覆盖 丢失数据 扩容因子0.75
 
 
 
CopyOnWrite 读写分离 写的时候copy一份。加锁
 
 
 
 
 
 
 
 
 
 
 
 
 
posted @   a菜搬砖  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示