java集合框架总结

ArrayList:

Object[] 数组实现
default_capacity = 10
扩容: newCapacity = oldCapacity + (oldCapacity >> 1), 最大值为Integer.MAX_VALUE
modCount: 用于迭代器的并发修改检查, 迭代过程中若发现其他线程修改了链表,抛出ConCurrentModificationException

LinkedList:

没有什么特别要记的

HashMap:

数组 + 链表 + 红黑树(jdk1.8)
default_capacity = 1 << 4
terrfiy_threshold = 8, 超过此值链表转为红黑树
loadFactor = 0.75
插入位置:table[(h = hash(Object o)) & capacity - 1]
扩容: 2倍, 发生在size超过threshold(capacity * loadfactor)
扩容后重hash: 对于某条链表上的node来讲, 新位置有两种情况: if e.hash & oldCapacity == 0,newPosition = oldPosition; else newPosition = oldPosition + oldCapacity;

LinkedHashMap extends HashMap:

Entry extends Node,在Node基础上添加了before,after指针,维护一条带头尾结点的双向链表,链表有两种顺序:访问顺序,最近访问的在链表尾部; 插入顺序

PriorityQueue:

Object[]数组 + 最大堆实现
对于队列数据要求数据自身实现Comparable接口,或者创建队列时传入Comparator,目的都是为了可以对数据进行比较
插入数据时, 先插到最后, 然后siftUp调整堆, 取出数据时,移除堆顶数据,然后将最后一个数据放置堆顶,siftDown调整堆
扩容: newCapacity = oldCapacity + (oldCapacity < 64) ? (oldCapacity + 2) : (oldCapacity >> 1)

ThreadLocal<T>:

Thread内部维护一个ThreadLocalMap对象, 这个Map的key是ThreadLocal, 值是线程需要存的数据。ThreadLocal其实就是线程的管家,所有线程私有的东西都可以交给它来管理。如果碰到共享的数据,那么ThreadLocal可以为线程保存一份私有副本,这样就可以避免使用锁而提高性能了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 4,295评论 0 16
  • 在热气腾腾的车厢 人与人紧密相挨 像欲待下锅的饺子 又像竹笋般矗立的冰雕 唯有你与众不同 你始终保持鲜艳微笑 还散...
    江小昨阅读 181评论 3 5
  • 第十三话 冒险 “Ok!搞定!这下买定离手,没得反悔了你。”电话那头夸张的笑声,让赵丽颖可以想象得到某人笑得是有多...
    等猴抱兔阅读 812评论 1 17
  • 1、 她是那一株曼陀罗,是生长在曼陀山庄的那一朵遗世之花。 卿本佳人,本应该有一个好的运数,可是她偏偏为情负累,既...
    顾秋水阅读 5,118评论 34 42
  • 文/刘西楚 有一类艺术作品呈现的是一片混乱的人类经验。它们既不求磨光那些粗糙的棱角,也不像多数影片那样回避现实生活...
    刘西楚阅读 392评论 2 2