如果一个程序只包含固定数量的且其生命值都是已知的对象,那么这是一个非常简单的程序.
通常,程序总是根据运行时才知道的某些条件去创建对象.
本章都为简单介绍容器,17章会有详细深入
11.1 泛型和类型安全的容器
使用泛型来指定集合存储数据的类型.将编译期的错误转到运行期.取出来可以直到类型的具体信息,不需要进行转型.11.2 基本概念
java容器类类库的用途的"保存对象",并将其划分为两个不同的概念;1)collection
2)map
所有的collection都可以使用foreach语法遍历.
11.3 添加一组元素
Collections 工具类的使用addAll(); Arrays.asList();
11.4 容器的打印
递归,容器里还有容器11.5 list 有序,可以重复
ArrayList,它长于随机访问元素,但是在List的中间插入和移除元素时比较慢.LinkedList ,使用链表的结构,所以它插入和删除元素会比较快,但是随机访问会比较慢.
11.6 迭代器
迭代器(也是一种设计模式)11.7 linkedlist
linked添加了可以让他用于栈,队列,或双端队的方法.11.8 stack
"栈"通常是"先进后出"的容器.有时栈也被称为叠加栈,因为最后"压入"栈的元素,第一个弹出栈的元素.linkedlist 具有能够直接实现栈的所有功能的方法,因此可以直接将linkedlist作为栈来使用,不过有时一个真正的"栈"更能把事情说清楚.
11.9 set
set不保存重复的元素(如何判断重复元素比较复杂)hashset hashcode方法和equals方法
treeset
11.10 map
将对象映射到其他对象的能力是一种解决编程问题的杀手锏.键值对的存储方式(键只能是唯一)
11.11 queue
- 队列是一个典型的先进先出的容器.即从容器的一端放入,从另一端取出,并且事物放入容易的顺序和取出的顺序是相同的
- 队列在并发编程中特别重要.它们可以安全的将对象从一个任务传输给另一个任务.
11.11.1 PriorityQueue(优先级队列)
- 先进先出描述了最典型的队列规则.队列规则是指在给定一组队列中的元素的情况下,确定下一个弹出队列的元素的规则.
- 在添加元素时,使用comparator来修改这个顺序.确保获取的元素是自己想要的优先级的元素.
11.12 collection和iterator
collection是描述所有有序列容器的共性的跟接口,它可以被认为是一个"附属接口".使用接口描述的一个理由是它可以使我们能够创建更通用的代码.通过针对接口而非具体实现来编写代码,我们的代码可以应用与更多的对象类型.例如使用一个方法,接收的参数为collection.
11.13 foreach与迭代器
到目前为止,foreach语法主要用于数组,但是它也可以应用与任何的collection对象.11.13.1 适配器方法惯用法
当你有一个接口需要另一个接口时,编写适配器就可以解决问题.(详见适配器设计模式)11.14 总结
可以看到,除了treeset之外的所有set都拥有与collection完全一样的接口.list和collection存在明显的不同,尽管list锁要求的方法都在collection中.另一方面,在queue接口中的方法都是独立的;在创建queque功能的实现时,不需要使用collection方法.最后map与collection之间的唯一重叠就是map可以使用entrySet(),和values方法来产生collection.