其中用绿色填充的为经常使用的类,需重点掌握。java
Java容器的最上层都是以接口的形式出现,具体实现由子接口完成。举个栗子,常见的如数组
Map<Integer,String> map = new HashMap<Integer, String>();
迭代器,用于遍历容器,JDK源码以下:安全
package java.util; import java.util.function.Consumer; public interface Iterator<E> { boolean hasNext(); E next(); default void remove() { throw new UnsupportedOperationException("remove"); } default void forEachRemaining(Consumer<? super E> action) { Objects.requireNonNull(action); while (hasNext()) action.accept(next()); } }
常见用法:数据结构
Iterator iter = l.iterator(); while(iter.hasNext()){ String str = (String) iter.next(); System.out.println(str); }
存放独立元素的序列。Collection下又有三个子接口,List,Set,Queue。工具
一个有序的Collection(也称序列),元素能够重复。确切的讲,列表一般容许知足 e1.equals(e2) 的元素对 e1 和 e2,而且若是列表自己容许 null 元素的话,一般它们容许多个 null 元素。实现List的有:ArrayList、LinkedList、Vector、Stack等。性能
一个不包括重复元素(包括可变对象)的Collection,是一种无序的集合。Set不包含满 a.equals(b) 的元素对a和b,而且最多有一个null。实现Set的接口有:EnumSet、HashSet、TreeSet等。ui
一种队列则是双端队列,支持在头、尾两端插入和移除元素,主要包括:ArrayDeque、LinkedBlockingDeque、LinkedList。另外一种是阻塞式队列,队列满了之后再插入元素则会抛出异常,主要包括ArrayBlockQueue、PriorityBlockingQueue、LinkedBlockingQueue。spa
存放key-value型的元素对。线程
数据结构采用的是线性表,优点是访问和查询十分方便,但添加和删除的时候效率很低。设计
数据结构采用的是链表,优点是删除和添加的效率很高,但随机访问元素时效率较ArrayList类低。
数据结构采用的是散列表,主要是设计用来作高性能集运算的,例如对两个集合求交集、并集、差集等。集合中包含一组不重复出现且无特性顺序的元素。其值是不可重复与无序的。
数据结构使用的是红黑树,性能上低于HashSet,用于排序。
数据结构使用的是散列表,是最经常使用的是Collection
与TreeSet同理,用于排序。
这二者能够理解成工具类,提供一些处理容器类静态方法,好比二分查找,排序等等。
没特殊需求,通常用ArrayList
由于Array是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的。Array获取数据的时间复杂度是O(1),可是要删除数据倒是开销很大的,由于这须要重排数组中的全部数据。
相对于ArrayList,LinkedList插入是更快的。由于LinkedList不像ArrayList同样,不须要改变数组的大小,也不须要在数组装满的时候要将全部的数据从新装入一个新的数组,这是ArrayList最坏的一种状况,时间复杂度是O(n),而LinkedList中插入或删除的时间复杂度仅为O(1)。ArrayList在插入数据时还须要更新索引(除了插入数组的尾部)。
相似于插入数据,删除数据时,LinkedList也优于ArrayList。
LinkedList须要更多的内存,由于ArrayList的每一个索引的位置是实际的数据,而LinkedList中的每一个节点中存储的是实际的数据和先后节点的位置。