美文网首页
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