Java编程思想——第十一章:持有对象
2019-06-03 本文已影响0人
代夫阿普曼
容器提供完善的方法来保存对象,还拥有一些特性。Java容器类都可以自动地调整自己的尺寸。
1.泛型和类型安全的容器
- 通过使用泛型,可以在编译期防止将错误类型的对象放置到容器中。
- 将元素从容器中拿出时,类型转换也不再是必需的了。因为容器直到它保存的是什么类型,因此它会在调用
get()
时替你执行转型。
2.基本概念
-
容器类类库的两个不同概念:
-
Collection
:一个独立元素的序列,这些元素都服从一条或多条规则。List
必须按照插入的顺序保存元素,而Set
不能有重复元素。Queue
按照排队规则来确定对象产生的顺序。 -
Map
:一组成对的键值对对象,允许使用键来查值。
所有的
Collection
都可以用foreach
语法遍历。 -
3.添加一组元素
-
Arrays.asList()
方法接受一个数组或是一个用逗号分隔的元素列表,并将其转换为一个List对象。 -
Collection.addAll()
方法接受一个Collection对象,以及一个数组或是一个用逗号分割的列表,将元素添加到Collection中。 -
在
Arrays.asList()
中间插入一条“线索”,以告诉编译器对于由Arrays.asList()
产生的List类型,实际目的类型应该是什么,这称为显式类型
。List<Snow> snow = Arrays.<Snow>asList(new Light(),new Heavy());
4.容器的打印
- Collection打印出来的内容用方括号括住,逗号分隔。Map则用大括号括住,键与值由等号联系。
5.List
- List承诺将元素维护在特定的序列中。
ArrayList
LinkedList
6.迭代器
- 迭代器只是使用容器,不用关系容器的类型。它是一个对象,工作是遍历并选择序列中的对象,而客户端程序员不必知道或关系该序列底层的结构。常被称为轻量级对象。
7.ListIterator
-
ListIterator
是一个更强大的Iterator子类型。它只能用于各种List类的访问。可以双向移动还可以产生相对于迭代器在列表中指向当前位置的前一个和后一个元素的指引,并且可以使用set()方法替换它访问过的最后一个元素。可以通过调用ListIterator()
方法产生一个指向List开始处的ListIterator
,并且还可以通过调用listIterator(n)
方法创建一个开始就指向列表为n的元素处的ListIterator
。
8.LinkedList
-
LinkedList
添加了可以使其用作栈、队列或双端队列的方法。
9.Set
- Set不保存重复的元素。Set具有和Collection完全一样的接口,因此没有额外的功能。Set就是Collection,只是行为不同。
10.Map
- Map能将对象映射到其他对象。
- Map可以返回它的键的Set(使用
keySet()
方法),它的值的Collection,或是键值对的Set。
11.Queue
- 队列是一个FIFO的容器。队列被当作一种可靠的将对象从程序的某个区域传输到另一区域的途径。队列在并发编程中特别重要,因为它们可以安全地将对象从一个任务传输到另一个任务。
- 优先级队列声明下一个弹出元素是最需要的元素。
12.Collection和Iterator
-
Collection
是描述有序容器的共性的根接口。 - 通过针对接口而非具体实现来编写代码,我们的代码可以应用于更多的对象类型。
13.Foreach与迭代器
- foreach语法主要用于数组,但是它也可以应用于任何Collection对象。
- Iterable接口包含一个能够产生Iterator的
iterator()
方法,并且Iterable接口被foreach用来在序列中移动。因此如果你创建了任何实现Iterable的类,都可以将它用于foreach语句中。
03/06/2019 :created