1. java类库中提供了一套完整的容器来储存未知数量对象的类型,这些类称为集合类。
2. 泛型:使用“容器类型<对象类型>”这种方式来表达,当<>中为T时,表示容器是一个参数化类型,在类被使用时被实际类型替换。它指定了这个容器可以保存的类型,使用泛型,就可以在编译期防止将错误类型的对象放置到容器中。
3. 当指定了某个类型作为泛型参数时,并不限于只能将该确切类型的对象放置到容器中,向上转型的对象也可以作用于泛型。
4. Java容器类类库的用途是“保存对象”,主要划分为两个类型:Collection和Map。Collection是一个独立元素的序列,这些元素都服从一条或多条规则。Map是一组成对的“键值对”对象,允许使用键来查找值。
5. Collection和Map都具有不同类型的继承类型。比如List,Set,Queue,HashMap,TreeMap,LinkedHashMap等等。每个类型都有自己的方法和特性。
6. List:List接口在collection的基础上添加了大量的方法,使得可以再List的中间插入和移除元素。List分为ArrayList和LinkedList两种。
7. ArrayList优势在于随机访问元素,但是在List中间插入和删除元素较慢。LinkedList能够通过较低代价在List中间进行元素的插入和删除操作,但随机访问较慢。LinkeList的特性集比ArrayList更大。
8. 迭代器:迭代器是一个对象,它的工作是遍历并选择序列中的对象,而客户端程序员不必知道或关心该序列层的结构。
9. Java的Iterator只能单向移动,使用iterator()要求容器返回一个Iterator,使用next()获得序列中的下一个元素;使用hasNext()检查序列中是否还有元素;使用remove()将迭代器新近返回的元素删除。
10. ListIterator是一个更加强大的Iterator的子类型,它只能用于各种List类的访问。ListIterator可以双向移动,产生相对于迭代器列表中指向的当前位置的前一个和后一个元素的索引,并且可以使用set()方法替换它访问过的最后一个元素。通过listIterator(n)方法创建一个开始就指向列表索引为n的元素处的ListIterator。
11. LinkedList添加了可以使用作栈、队列或双端队列的方法。
12. Stack,栈通常指“后进先出”(LIFO)的容器,LinkedList可以完全实现栈的功能。
13. Queue,队列是一个典型的先进先出(FIFO)的容器。LinkedList提供了方法以支持队列的行为,并且实现了Queue接口。可以通过LinkeList向上转型为Queue。
14. PriorityQueue,优先级队列声明下一个弹出元素是最需要的元素(具有最高优先级)。
15. Set:set不保存重复元素,Set中最常用的是测试归属性,你可以很容易地查询某个对象是否在某个Set中。查找时Set中最重要的操作,通常使用HashSet实现。HashSet使用了散列,TreeSet使用了红-黑树数据结构,适用于对结果排序。
16. Map,适用于对象映射到其他对象的问题。Map可以返回它的键的Set,它的值的collection,或者它的键值对的Set。KeySet()方法产生了Map对象的键组成Set。
17. 简单容器分类:
其实只有四种容器:Map、List、Set、Queue,它们各有两到三个实现版本。常用的容器用黑色粗线框表示,点线框表示接口,实线框表示普通类,空心箭头的点线表示一个特定的类实现一个接口,实心箭头表示某个类可以生成箭头所指向类的对象。