1. Vector、ArrayList和LinkedList三者的区别。
a.ArrayList是最常用的List实现类,其内部是由一个数组实现的,可以实现快速的随机访问。ArrayList类实例不适合复制、移动较多操作。ArrayList不适合插入和删除,适合随机查找和遍历。
b.Vector和ArrayList的实现基本相同,也是由数组实现的。但是,Vector类的方法都是同步的,同一时刻只能有一个线程对Vector实例进行写操作。因此,Vector的访问比ArrayList慢,但是是线程安全的。
c.LinkedList相较于ArrayList来说,使用较少,其内部是使用链表结构存储数据的,很适合数据的动态插入和删除操作,不适合随机查找和遍历。此外,LinkedList还定义了一些List接口未规定的方法,以实现对表头和表尾的操作,因而LinkedList可以被用来堆栈、队列和双向队列使用。
2. Stack。
1.Stack是一个LIFO的堆栈数据结构,是在Vector类的基础上扩展了push,pop,search,empty和peek五个方法而来的。
2.Stack和Vector类一样,也是线程安全类。
3. HashTable和HashMap
a. HashTable继承自Dictionary抽象类,实现了Map接口,因而也属于集合框架的一部分。
b.在功能上,HashTable几乎可以和HashMap等价。例外,HashTable的key和value都不可以是null,而HashMap的key和value都可以是null。对比HashTable和HashMap的put方法源代码可以发现,HashTable在求key的hash值得时候,并未作特殊处理,null在调用hashCode()方法的时候,会抛出异常,而在put()方法中,HashTable对value进行了检查,当value为null的时候,HashTable会主动抛出异常。HashMap则对key求hash做了特殊的处理,而对value是未做检查的。
c.从性能上讲,HashTable的方法都进行了同步,是线程安全的,HashMap则未做同步,非线程安全。由于同步方法的缘故,HashTable在存取上速度是比HashMap慢的。
d.java 5 中新增的ConcurrentHashMap是对HashTable的替代。暂未研究
e.Map m = Collections.synchronizeMap(hashMap);这样一来m就是一个线程同步的map了。
4.BitSet类。
5.Enumeration接口。
a.Enumberation类定制了两个方法,hasMoreElements()和nextElement()方法。
6.Java集合框架的基本接口。Collection接口和Iterator接口。
a.Collection接口规定的方法列表:
1.Iterator iterator()方法。2.int size()方法。 3.boolean isEmpty() 方法。4.boolean contains()方法。5.boolean containsAll()方法。
6.boolean add()方法。 7.boolean addAll()方法。8.boolean remove()方法。9.boolean removeAll()方法。10.boolean retainAll()方法。11. viod clear()方法。 12. Object[] toArray()方法。
b.Iterator接口方法列表。
1.next()方法。2.hasNext()方法。3.remove()方法。
7.for each循环可以与任何实现了Iterable接口的对象一起工作。
Iterable接口的方法只有一个:Iterator iterator()方法。
8. 其他的一些接口。
1.Queue接口扩展自Collection接口,在Collection接口的基础上,增加了如下方法:
a. add()方法。b.offer()方法。c. remove()方法。d.poll()方法。e.element()方法和f.peek()方法。
2.Deque接口。
9.Set实现类
a.HashSet。内部使用HashMap实现。
b.LinkedHashMap。内部使用LinkedHashMap实现。
c.TreeSet。内部使用TreeMap实现。
10.远古容器类,Vector、Stack、HashTable和Properties。
11.Arrays.asList()方法。将一个数组包装成一个List类型的对象,但不是ArrayList对象,它是一个视图对象,带有get和set方法,但是不带有改变数组的的方法,如add和remove,调用该类方法会抛出异常。
12.子范围。subSet()方法,subLis()方法,subMap方法。
13.集合与数组之间的转换。数组转集合较为好转,集合转数组较为麻烦。
14.