collection

主要讲解说明Java集合的一些类和接口实现关系、部分的原理以及数据结构算法记录

Java集合继承关系和实现

集合继承和实现关系

大部分类都存放在java.util包中,不过主要分为三大类,List、Map、Set

List



List是一个接口,总的来说就是一个有序的集合,其实现有ArrayList、LinkedList和Vector,这三个主要的集合

ArrayList

ArrayList是我们在编码过程中经常需要使用到的一个集合类,其内部是简单的的数组容器,允许空的对象、有序、效率相对较高。ArrayList会维护一个capacity,这个capacity使用至少是与数组的实际大小一样大,会进行自动的扩容,容量扩大为原来的1.5倍,是进行复制来进行扩容的;ArrayList是线程不安全的,因为多线程环境下,add操作可以造成elementData数组下标记越界和空值。数组插入、删除的时间复杂度是$O_(n_)$,获取元素的时间复杂度是$O_(1_)$。

Vector

Vector的实现也是一个由数组实现的,不过这个是线程安全的,在某个时刻只能有一个线程去写Vector,避免多线程同时写而引起的不一致性,效率相对较慢。

LinkedList

LinkedList本质上是一个链表,适合数据的动态插入和删除,时间复杂度都是$O_(1_)$不过从上面的结构中可以看出来,LinkedList实现了List接口,也实现了Deque得接口,而Deque的接口的父类是Queue队列。

Set