《Java编程思想》 第11章 持有对象
文章目录
如果一个程序只包含固定数量的且其生命周期都是已知的对象,那么这是一个非常简单的程序。
Java中有集合类:List、Set、Queue、Map,又称容器类
11.1 泛型和类型安全的容器
ArrayList(): add(), get(), size()
@SuppressWarnings注解及其参数表示只有有关“不受检查的异常”的警告信息应该被抑制。
ArrayList<Apple> apples = new ArrayList<Apple>();
11.2 基本概念
Java容器类类库的用途是“保存对象”,并将其划分成两个不同的概念:
- Collection:独立元素的序列,这些元素都服从一条或多条规则。List必须按照插入的顺序保存元素,Set不能有重复元素。Queue按照队列规则来确定对象产生的顺序
- Map:一组成对的“键值对”对象,允许使用键来查找值。ArrayList允许使用数字来查找值。映射表允许使用另外一个对象来查找某一个对象,这被称之为“关联数组”,或者称之为“字典”。
ArrayList向上转型为List接口类型,这样是可以的。
List<Apple> apples = new ArrayList<Apple>();
但是要创建LinkedList就不能转型为List类型,因为LinkedList具有在List接口中没有的额外方法
List<Apple> apples = new LinkedList<Apple>();
TreeMap也具有Map接口没有的方法。
11.3 添加一组元素
java.util中有Arrays和Collections类,可以在Collection中添加一组元素。
Arrays.asList(): 接受一个数组或者是一个用逗号分隔的元素列表(使用可变参数)将其转换成List对象。
11.4 容器的打印
11.5 List
List <Pet> pets = Pets.arrayList(7);
Pet h = new Pet();
pets.add(h);
pets.remove(h);
Pet p = pets.get(2);
pets.indexOf(p);
pets.add(3, new Pet());
List<Pet> sub = pets.subList(1, 3);
pets.contains(p);
pets.retainAll(sub);
pets.toArray();
11.6 迭代器
Iterator
迭代器(也是一种设计模式)是一个对象,它的工作就是遍历并选择序列中的对象。轻量级对象
Java中Iterator只能单向移动,这个Iterator只能用来:
- 使用方法iterator()要求容器返回一个Iterator。Iterator将准备好返回序列的第一个元素
- 使用next()获得序列中的下一个元素
- 使用hasNext()检查序列中是否还有元素
- 使用remove()将迭代器新近返回的元素删除
List<Pet> pets = Pets.arrayList(12);
Iterator<Pet> it = pets.iterator();
while(it.hasNext()){
Pet p = it.next();
System.out.println(p)
}
11.6.1 ListIterator
ListIterator是一个更强大的Iterator的子类型,但是只能用于List类的访问。Iterator只能单向移动,ListIterator可能双向移动。
11.7 LinkedList
LinkedList有栈、队列或者双端队列
getFirst();
element();
peek();
removeFirst();
remove();
poll();
addFirst();
add();
addLast();
removeLast();
11.8 Stack
push();
peek();
pop();
empty();
Stack要用net.mindview.util.*包。而不是java.util
11.9 Set
Set就是Collection,只是不允许有重复的值。
11.10 Map
Map<key, value>类型
当然可以扩展为多维结构:
Map<Person, List<Pet>>
11.11 Queue
peek();
offer();
poll();
11.11.1 PriorityQueue
优先级队列:按照自然顺序排列,可以提供Comparator来修改顺序
11.14 总结
P245和P246可以多看几次,总结一下
以及246的图: