Collection主要有list和set两个子接口:
List接口:对Collection进行了简单的扩充,它的具体实现类常用的有ArrayList,Vector和LinkedList。ArrayList从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度极快,而LinkedList的内部实现是链表,它适合于在链表中间需要频繁进行插入和删除操作。(ArrayList 是线程不安全的, Vector 是线程安全的,这两个类底层都是由数组实现的 LinkedList 是线程不安全的,底层是由链表实现的 )
Set接口:是Collection的另一种扩展,在Set中的对象元素不能重复。它的常用具体实现有HashSet和TreeSet类。HashSet能快速定位一个元素,但是你放到HashSet中的对象需要实现hashCode()方法,它使用了前面说过的哈希码的算法。而TreeSet则将放入其中的元素按序存放,这就要求你放入其中的对象是可排序的(实现Comparable接口)。
ps:集合框架提供的另外两个实用类Comparable和Comparator。一个类是可排序的,它就应该实现Comparable接口。Comparable是内部排序,即一个类实现Comparable接口后,自身拥有一个compareTo()的比较方法,用来将自身和传来的对象进行比较。而Comparator是外部排序,它使用的策略模式,将你所需要的比较逻辑实现为一个Comparator,然后传回给对象(不需要改变对象本身结构,面向接口编程),从而实现比较。
Map是一种把键对象和值对象进行关联的容器:
Map比较常用的实现:Hashtable,HashMap和TreeMap。HashMap也用到了哈希码的算法,以便快速查找一个键,TreeMap则是对键按序存放。TreeMap则是对键按序存放,因此它便有一些扩展的方法,比如firstKey(),lastKey()等,你还可以从TreeMap中指定一个范围以取得其子Map。(HashTable 是线程安全的,不能存储 null 值 ,HashMap 不是线程安全的,可以存储 null 值)