集合相关:
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一份。加锁
用于记录,学习。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端