欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

《Java编程思想》 第11章 持有对象

程序员文章站 2024-03-17 18:37:10
...

如果一个程序只包含固定数量的且其生命周期都是已知的对象,那么这是一个非常简单的程序。

Java中有集合类:List、Set、Queue、Map,又称容器类

11.1 泛型和类型安全的容器

ArrayList(): add(), get(), size()

@SuppressWarnings注解及其参数表示只有有关“不受检查的异常”的警告信息应该被抑制。

ArrayList<Apple> apples = new ArrayList<Apple>();

11.2 基本概念

Java容器类类库的用途是“保存对象”,并将其划分成两个不同的概念:

  1. Collection:独立元素的序列,这些元素都服从一条或多条规则。List必须按照插入的顺序保存元素,Set不能有重复元素。Queue按照队列规则来确定对象产生的顺序
  2. 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只能用来:

  1. 使用方法iterator()要求容器返回一个Iterator。Iterator将准备好返回序列的第一个元素
  2. 使用next()获得序列中的下一个元素
  3. 使用hasNext()检查序列中是否还有元素
  4. 使用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的图:

《Java编程思想》 第11章 持有对象