关系
- Collection
- List
- LinkedList
- ArrayList
- Vector
- Set
- HashSet
- LinkedHashSet
- TreeSet
- List
- Map
- HashTable
- HashMap
- LinkedHashMap
- TreeMap
List类族
ArrayList、Vector和LinkedList都继承自AbstractList,AbstractList实现了List接口,并扩展自AbstractCollection.
ArrayList、Vector均采用数组实现,二者区别在于Vector做了线程同步,是线程安全的;
LinkedList使用了循环双向链表结构
列表遍历
for…each、Iterator、for循环
反编译后发现ForEach的实现就是使用的Iterator迭代,但又比Iterator多了一层赋值,所以速度ForEach略多与Iterator
String tmp;
for (String string : list) {
tmp = string;
}
//编译后
ArrayList list = new ArrayList();
for(Iterator iterator = list.iterator(); iterator.hasNext();)
{
String string = (String)iterator.next();
String s = string;
}
//若ForEach循环内直接对循环内容操作,和iterator一样
对数组实现的ArrayList而言,随机访问速度较快,故使用For循环性能就好;
对链表实现的LinkedList来讲,实现随机访问最坏要遍历整个集合,故优先使用前两种。
Map类族
HashTable和HashMap都实现了Map接口,Hashtable子类中海油Properties类的实现。
HashTable对大部分方法做了同步,HashMap没有,因此HashMap是线程不安全的。
HashTable不允许key和value使用null值,HashMap可以。
LinkedHashMap继承自HashMap,在HashMap的基础上增加了一个链表来维护元素的次序表。
TreeSet实现了SortedMap接口,可以对元素进行排序,内部实现是基于红黑树,有着高效的基于key的排序算法。
Set类族
Set元素是不能重复的,Set的实现实际上是对相应的Map实现的封装,HashSet对应HashMap,HashSet内部维护了一个HashMap对象