一、List与ArrayList的差别
List->AbstractList->ArrayList
ArrayList和HashMap是异步的,Vector和HashTable是同步的,所以Vector和HashTable是线程平安的,而ArrayList和HashMap并不是线程保险的。因为同步需要破费机器时间,所以Vector和HashTable的履行效率要低于ArrayList和HashMap。
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
List接口
List是有序的Collection,应用此接口可能准确的把持每个元素插入的位置。用户可以使用索引(元素在List中的地位,相似于数组下标)来拜访List中的元素,这类似于Java的数组。
和下面要提到的Set不同,List许可有雷同的元素。
除了存在Collection接口必备的iterator()方法外,房事持久液,List还供给一个listIterator()办法,返回一个ListIterator接口,冯巩的风趣,跟尺度的Iterator接口比拟,ListIterator多了一些add()之类的方法,容许增加,删除,设定元素,还能向前或向后遍历。
实现List接口的常用类有LinkedList,ArrayList,Vector和Stack。
ArrayList类
ArrayList实现了可变大小的数组。它允许所有元素,包含null。ArrayList没有同步。
size,isEmpty,get,set方法运行时间为常数。但是add方法开销为摊派的常数,家庭保健,添加n个元素需要O(n)的时间。其余的方法运行时间为线性。
每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可跟着一直增添新元素而主动增长,然而增加算法并没有定义。当须要插入大批元素时,在插入前能够调用ensureCapacity方法来增添ArrayList的容量以进步插入效力。
和LinkedList一样,ArrayList也是非同步的(unsynchronized)。
Map接口
请留神,Map没有继续Collection接口,Map提供key到value的映射。一个Map中不能包括相同的key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。
HashMap类
HashMap和Hashtable类似,不同之处在于HashMap长短同步的,并且答应null,即null value和null key。,但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时光开销和HashMap的容量成比例。因而,如果迭代操作的性能相称主要的话,不要将HashMap的初始化容量设得过高,或者load factor过低。
--------------- |