第11章 持有对象
11.1 泛型和类型安全容器
ArrayList:可以自动扩充自身尺寸的数组
11.2 基本概念
Java 容器的用途是“保存对象”
Collection(一个独立元素的序列) : 所有的Collection都可以用foreach遍历
List
Queue
Map(字典关联数组):
11.3 添加一组元素
Arrays.asList() 接受一个数组或是用逗号分隔的元素列表,并将其转化为一个List。
当直接使用它作为输出,将其当作List,这种情况下底层表示的数组,因此不能改变其大小。
Collection.addAll() 接受一个Collection对象,以及数组或用逗号分隔的列表,将元素添加到Collection。
11.4 容器的打印
Java 容器主要有两种类型,区别在于容器的每个“槽”保存元素的个数(例如:Set,List,Queue 保存一个对象 ,Map 保存两个对象)
------------------- ArrayList(大量随机访问)
Collection ------------------ List(自动扩充容量排好序) ------------------- LinkedList(插入删除)直接作为栈使用
------------------- HashList(查找最快使用散列函数)
------------------ Set(集合) ------------------- TreeSet(将元素储存在红黑树数据结构中,元素排序状态)
------------------- LinkdHashSet(以插入顺序保持元素)
Map ------------------- HashMap
------------------- TreeMap
------------------- LinkedHashMap(插入查找)
11.6 迭代器
迭代器也是一种设计模式,它是一个对象,作用是遍历选择序列的每一个元素。
此外,迭代器被称为轻量级对象:创建对象代价小,
Iterator:1)Iterator 将准备返回序列的第一个元素。
2)next() 返回序列的下一个元素。
3)hasNext() 检查序列中是否还有下一个元素
4)remmoce() 将迭代器新近元素删除
IteratorList
Stack:叠加栈
Set:(集合)不保存重复元素,常被使用的是测试归属性(询问某个对象是否在某个set中),因此查找就是Set中最重要的操作,所以
HashSet 的实现就是专门对快速查找进行了优化。
Set 其实就是 Collection,只是表现行为不同,Set 基于对象值来确定归属性。
Map:对象映射到其它对象是解决编程问题的杀手锏。(检查Random的随机性)
容易扩展到多维。例如:跟踪拥有多个宠物的人 Map<Person, List<Pet>>
Queue:先进先出容器,常被用作一种可靠的将对象,从程序的某个区域传到另一个区域的途径,在并发编程中十分重要
LinkedList 提供了支持队列的行为,并且它实现了Queue接口(可以作为 Queue的实现)
PriorityQueue
11.12 Collection 和 Iteration
Collection:是描述所有序列容器的共性接口,被认为是附属接口,因为要表示若他从其它若干接口的共性而出现的接口。
用迭代器而不是Collection 来表示容器之间的共性。
容器之间的所有共性都是通过迭代器达成的。
11.13 Foreach 与迭代器
foreach : 主要用于数组,也可用于人和 Collection 对象
Itereable 接口被foreach用来在序列中移动,类实现了Iterable的类,都可以将它用于foreach()语句。