Java集合类_java

List接口:有序的列表,使用此接口可以精确的控制每一个元素插入的位置,能够使用索引来访问List中元素。

ArrayList:底层数据结构是数组,查询快,增删慢,非线程安全,效率高;

扩容原理:通过构造方法定义初始容量/不初始化默认为0。默认为0时,添加第一个元素,容量变成10,添加第11个元素,容量变成11+11>>1=16newCapacity = oldCapacity + (oldCapacity >>1))。

Vector: 底层数据结构是数组,查询快,增删慢,线程安全,效率低;

扩容原理:当扩容因子大于0时,新数组长度为原数组长度+扩容因子,否则新数组长度为原数组长度的2倍。

StackVector的子类,栈结构,先进后出;

LinkedList: 底层数据结构是链表,查询慢,增删快,非线程安全,效率高;

Set接口:不允许出现重复元素;集合中的元素位置无顺序;有且只有一个值为null的元素。

HashSet:实现Set接口,由哈希表支持,底层源码的方法大都通过HashMap实现。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。

LinkedHashSet实现有序的HashSet(维护着一个运行于所有条目的双重链接列表),该迭代顺序可为插入顺序或是访问顺序。

TreeSet通过红黑树数据结构实现(即一棵平衡的排序二叉树),这样就可以保证当需要快速检索指定节点。

Queue队列继承了Collection接口,是一种特殊的线性表,只允许在表的前端进行删除操作,而在表的后端进行插入操作。add()方法和offer()方法不同在于满队列时,add()方法抛异常,offer()方法返回false

PriorityQueue优先队列,通过二叉小顶堆实现,可以用一棵完全二叉树表示。优先队列的作用是能保证每次取出的元素都是队列中权值最小的。

Deque接口:双向队列是Queue的一个子接口,双向队列是指该队列两端的元素既能入队(offer)也能出队(poll)LinkedList类实现了该接口,此时,LinkedList类和List接口下的类方法不同。

Map双列集合,包括键和值,并且键必须是唯一的。

HashMap:实现了Map接口,非线程安全,底层为数组+链表+红黑树实现。

HashTable:实现了Map接口,线程安全,不能存null键。