美文网首页
java集合框架总结

java集合框架总结

作者: 会飞的猪姥姥 | 来源:发表于2017-07-27 16:47 被阅读0次

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可以为线程保存一份私有副本,这样就可以避免使用锁而提高性能了。

相关文章

网友评论

      本文标题:java集合框架总结

      本文链接:https://www.haomeiwen.com/subject/fjozkxtx.html