本文不是一个大而全的讲述Java Coleection 相关的APi, 而是笔者认为哪些是一个初学者所能够而且必须确切知道的知识点。
Collection 一脉
这里有我们比较常用的List<E>, Set<E>.
List<E>
实现这个接口的类有比较常见的ArrayList<E> 和 LinkedList<E>,还有Vector<E>.
Vector 是个线程安全的类:
public synchronized int lastIndexOf(Object o, int index) { if (index >= elementCount) throw new IndexOutOfBoundsException(index + " >= "+ elementCount); if (o == null) { for (int i = index; i >= 0; i--) if (elementData[i]==null) return i; } else { for (int i = index; i >= 0; i--) if (o.equals(elementData[i])) return i; } return -1; } public synchronized E firstElement() { if (elementCount == 0) { throw new NoSuchElementException(); } return elementData(0); } public synchronized E lastElement() {
里面关键的方法都用了synchronized 关键字,作为线程安全的保障,当然效率也低了不少。
ArrayList 的结构类似于数组
LinkedList 的结构类似于链表
Set<E>
Set 一脉最大的区别就是里面的元素不允许重复。
比较熟悉的就是HashSet<E> 了。
这里必须注意的是HashCode 的算法。
Map 一脉
* @param <K> the type of keys maintained by this map * @param <V> the type of mapped values * * @author Josh Bloch * @see HashMap * @see TreeMap * @see Hashtable * @see SortedMap * @see Collection * @see Set * @since 1.2 */ public interface Map<K,V> {
Map 一脉用来以键值对的形式存放。
上面的HashSet 里面其实放了一个HashMap<E,Object> 的内置的Map.
这里比较熟的应该就是HashMap 和ConcurrentMap 了。