Thinking in Java - 学习笔记 - (十一)持有对象

时间:2023-02-26 16:10:31

Java编程思想 - 第十一章 - 持有对象

如果一个程序只包含固定糖耐量的且其生命期都是书籍的对象,那么这是一个非常简单的程序。

通常,程序问题根据运行时才知道的某些条件支创建新对象。在此之前,不会知道所需对象的数量,甚至不知道确切的类型。

数组是保存一组对象的最有效的方式,但是数组具有固定的尺寸,而在更一般的情况中,你在写程序时并不知道将需要多少个对象,或者是否需要更复杂的方式来存储对象,因此数组尺寸固定这一限制显得过于受限了。

Java实用类库还提供了一套相当完整的窗口类来解决这个问题,其中基本的类型是ListSetQueueMap。(容器类)

泛型和类型安全的容器

泛型:尖括号括起来的类型参数(可以有多个),它指明了这个容器实例可以保存的类型。

    ArrayList<Integer> array = new ArrayList<>();

通过使用泛型,就可以在编译期防止将错误类型的对象放置到容器中。

基本概念

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

1)Collection。一个独立元素的序列,这些元素都服从一条或多条规则。List必须按照插入的顺序保存元素,而Set不能有重复元素。Queue按照排除规则来确定对象产生的顺序。

2)Map。一组成对的“键值对”对象,允许你使用键来想找值。ArrayList允许你使用数字来查找值,因此在某种意义上讲,它将数字与对象关联在了一起。映射表允许我们使用另一个对象来查找某个对象,它也被称为“关联数组”,因为它将某些对象与另外一些对象关联在了一起,或者被称为“字典”,因为你可以使用键对象来查找值对象。

迭代器

Iterator:能够将遍历序列的操作与序列底层的结构分离。
正由于此,我们有时传说:迭代器统一了对容器的访问方式。

ListIterator

ListIterator是一个更加强大的Iterator的子类型,它只能用于各种List类的访问。尽管Iterator只能向前移动,ListIterator可以双向移动。它还可以产生相对于迭代器在列表中指向的当前位置的前一个和后一个元素的索引,并且可以使用set()方法替换它访问过的最后一个元素。

LinkedList

LinkedList添加了可以使其用作栈、队列或双端队列的方法。

Stack

后进先出(LIFO)。

Queue

先进先出(FIFO)。
优先队列:PriorityQueue

总结

Thinking in Java - 学习笔记 - (十一)持有对象