Collection-1

前序:基础系列下一篇章是集合系列,这系列主要是想把各个集合的特点和源码核心实现部分的原理深入研究明白,当然前面的基础系列也会根据情况继续延续,我所整理的除了常用的知识点,基本都是我遇到的比较典型的问题积累。

2. 集合框架 

Collection(List、Set、Queue -> ArrayList/LinkedList、HashSet/COWArraySet/ConcurrentSkipListSet)

Map->HashMap/LinkedHashMap/CurrentHashMap

Collection和Collections的区别?

Collections里面的同步集合是如何实现的?装饰当前集合对象,同步装饰类,方法内部用synchronized(mutex)

SynchronizedCollection(Collection<E> c) {
            this.c = Objects.requireNonNull(c);+


            mutex = this;

}

Comparator和Comparable的区别?

Comparator ju包里 对象比较器 写单独的比较类实现此接口,实现int compare(T o1, T o2);方法,在实现类里实现对象比较

Comparable jl包里 比较对象实现此接口 实现int compareTo(T o)方法。常用上面的方法实现比较,由于比较类需要继承,破坏了实体类的特性。

2.1 List

ArrayList  

 容量 默认容量 10 

 结构 基于数组 transient Object[] elementData 为什么是transient修饰?

 扩容 grow int newCapacity = oldCapacity + (oldCapacity >> 1); 原始容量+原始容量的一半 扩容50%

 优缺点 访问 有序数组 可通过索引快速定位 随机访问快 

修改 插入、删除慢 要拷贝插入、删除位置以后的数组内容 

 【延伸】Arrays类  排序 MergeSort TimSort BinarySearch  Comparator Comparable

LinkedList 

  容量 无限制

  结构 基于双向链表 

        Node<E> 

        E item;

        Node<E> next;

        Node<E> prev;

  扩容 无限制

  优缺点 访问 需要移动指针。get时,首先判断索引和中间位置的大小 如果小于中间位置 从前往后遍历 x=first; x=x.next 如果大于中间位置 从后往前遍历 x=last; x=x.prev

修改 插入、删除元素时修改前后节点的指针即可,不在需要复制移动。但还是要部分遍历链表的指针才能移动到下标所指的位置。

    

评论已关闭。