(虚线框表示接口, 实线框表示普通的类,
空心箭头表示特定的类实现了接口, 实心箭头表示某个类可以生成箭头所指的类对象)
继承Collection的主要有Set 和 List.
List:
ArrayList 内部实现是用数组, 随机访问速度快, 删除或插入元素速度慢。
LinkedList 内部实现是用链表, 随机访问速度慢,删除和插入元素相对较快。
平时最佳的做法可能是将ArrayList作为默认首选,只有你需要使用额外的功能,或者因为经常从表中插入或删除元素导致程序性能变差的时候,才去选择LinkedList。
Vector和Stack是过去遗留下来的类,目的只是为了支持老程序,应该在编写程序时尽量避免使用它们。
Set:
Hash
HashSet: 为快速查找而设计,可以认为是基于哈希表的实现。 存入HashSet的元素必须定义hashCode().
LinkedHashSet: 具有HashSet的查询速度且内部使用链表维护元素的顺序(按插入的顺序或最近最少使用顺序)
Tree
TreeSet:保持次序的Set,底层为树结构(红黑树)。使用它可以从Set提取有序的序列。元素必须实现Comparable接口或者在构造TreeSet时传入Comparator参数。
1 class Stone { 2 private int volume; 3 4 public Stone(int volume) { 5 this.volume = volume; 6 } 7 8 public int getVolume() { 9 return volume; 10 } 11 12 //...........省略..........// 13 } 14 15 class Stick implements Comparable{ 16 private int length; 17 18 public Stick(int length) { 19 this.length = length; 20 } 21 22 public int getLength() { 23 return length; 24 } 25 26 @Override 27 public int compareTo(Object o) { 28 Stick st = (Stick)o; 29 return this.getLength() - st.getLength(); 30 } 31 32 //...........省略..........// 33 } 34 35 public class MyComparator implements Comparator<Stone>{ 36 37 @Override 38 public int compare(Stone st1, Stone st2) { 39 return st1.getVolume() - st2.getVolume(); 40 } 41 42 public static void main(String[] args) { 43 new TreeSet<Stone>(new MyComparator()); //传入Comparator 44 45 new TreeSet<Stick>(); //Stick实现了Comparable 46 } 47 }