类层次关系如下:
Collection 一个Collection代表一组ObjectJava SDK不提供直接继承自Collection的类,
│ Java SDK提供的类都是继承自Collection的“子接口”(List和Set)
│
├List List是有序的Collection,用户能够使用索引来访问List中的元素,这类似于Java的数组。
││
│├LinkedList 非同步;
││ LinkedList提供额外的get,remove,insert方法在 LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque
││
│├ArrayList 非同步
││ 实现了可变大小的数组
││
│└Vector 非常类似ArrayList,但是Vector是同步的
│ │
│ └Stack 实现一个后进先出的堆栈
│
└Set Set是一种不包含重复的元素的Collection
Map Map提供key到value的映射
│
├Hashtable 同步的
│ 实现一个key-value映射的哈希表
│
├HashMap 非同步
│
└WeakHashMap 一种改进的HashMap,它对key实行“弱引用”,如果一个key不再被外部所引用,那么该key可以被GC回收
总结
如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。
如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。
要特别注意对哈希表的操作,作为key的对象要正确复写equals和hashCode方法。
尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程
浙公网安备 33010602011771号