Collection
List
- 里面元素有序
- 可以重复
- 可以通过索引查找
Vector的方法都添加了Synchronized修饰符 所以线程安全
Linkedlist 底层是链表 增删快
Set
- 里面元素无序
- 没有重复元素
- Java底层是用Map实现 put(key,present)
TreeSet 底层是二叉树,保证元素排序 其中的元素需要有可比性 要么是实现了Comparable接口
要么自己写Comparator比较器
Queue
Map Hashmap
JDK8是 数组加链表加红黑树
如果哈希表的大小大于16(默认值)*扩容因子(0.75)则会扩容到下一个2^n
这是因为底层的hash函数是用(hashcode>>>16^hashcode)&n-1
前面后移16位然后自身异或可以让信息包括在后16位并且减少重复 提高散列
由于n 是2^n 所以-1后都是1111 这样相当于mod 减少存储的空间又提高散列
当哈希冲突发生时候 可以用链地址法和开放地址法解决
链地址法当冲突低于8时候是链表 冲突大于8会转成红黑树 当低于6又转成链表
Treemap
java底层是红黑树
文章图片
其他集合 Hashmap Hashtable ConcurrentHashMap
Hashtable 里面有一个Object对象mutex 里面所有方法都对 mutux加了锁
这样效率很低 所以我们相当将锁粒度化
【集合类】ConcurrentHashmap将数组每个元素进行加锁
文章图片
这样就可以减少锁对性能的影响
当头结点不存在的时候不用加锁 即用CAS操作添加头结点就行。
检测到内部正在扩容就帮助他一起扩容
推荐阅读
- Java|Java基础——数组
- 人工智能|干货!人体姿态估计与运动预测
- java简介|Java是什么(Java能用来干什么?)
- Java|规范的打印日志
- Linux|109 个实用 shell 脚本
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- Spring注解驱动第十讲--@Autowired使用
- SqlServer|sql server的UPDLOCK、HOLDLOCK试验
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)