写在前面:以下文章来自《Java编程思想》第四版 摘抄笔记,感兴趣的可以读一下《Java编程思想》这本书,非常不错,受益匪浅。感谢本书的作者以及译者。
(1)Java容器类类库的用途是“保存对象”,并将其划分为两个不同的概念:
- ①Cellection 一个独立元素的序列,这些元素都服从一条或多条规则。List必须按照插入的顺序保存元素,而set不能有哦重复的元素。Queue按照排队规则来确定对象产生的顺序。
②Map 一组成对的“键值对”对象,允许你使用键来查找值。映射表允许我们使用另一个对象来查找某个对象,它也被称为“关联数组”。对于每个键,Map只接受存储一次。
(2)List常用对象,以及常用方法
(3)Linkedlist:在列表中间插入和删除效率高,但是在随机访问操作方面要逊色。
(4)ArrayList: 列表,又称可变数组
(5)迭代器是一个对象,它的工作是遍历并选择序列中的对象,而客户端程序员 不必知道或关心该序列底层的结构。此外,迭代器通常被称为轻量级对象:创建代价小。
- ①Java的Iterator只能单向移动,
②使用方法iterator()要求容器返回一个Iterator。Iterator将准备好返回 序列的第一个元素。
③使用next()获得序列中的下一个元素
④使用 hasNext()检查序列中是否还有元素。
⑤使用remove()将迭代器新进返回的元素删除。
(6)ListIterator:可双向移动
(7)“栈”通常是指“先进后出”的容器。有时栈也被称为叠加栈,因为最后“压入”栈的元素,第一个“弹出 ”栈。经常用来类比栈的事物是装有弹簧的储放器中的自主餐托盘,最后装入的托盘总是最先拿出 使用的 。
- ①LinkedList具有能够直接实现栈的所有功能的方法,因此可以直接将LinkedList作为栈使用。
(8)HashSet所维护的顺序与TreeSet或LinkedHashSet都不同,因为 它们的实现具有不同的元素存储方式。
- ①TreeSet将元素存储在红-黑树数据结构中
②HashSet使用的是散列函数。
③LinkedHashList因为查询速度的原因也使用了散列,但是看起来它使用了链表来维护元素的插入顺序。
(9)Map
- ①Map与数组和其他的Collection一样,可以很容易地扩展到多维,而我们只需要将其值设置为Map(这些Map的值可以是其他容器,甚至是其他Map)。因此,我们能够很容易地将容器组合起来 从而快速地生成强大的数据结构。例如: Map<Person,List>。
(10)Queue
- ①队列是一个典型的先进先出的容器。即从容器的一端放入事物,从另一端取出,并且事物放入容器的顺序与取出的顺序是相同的。队列常被当作一种可靠的将对象从程序的某个区域传输到另一个区域的途径。
②LinkedList提供了方法支持队列的行为,并且它实现了Queue接口,因此LinkedList可以用作Queue的一种实现。通过LinkedList向上 转型为Queue:Queue queue = new LinkedList();
③Queue的相关方法 -
1)Offer(): 将一个元素插入到队尾
-
2)Peek():读取队头
-
3)Element():读取队头
-
4)Poll():移除并返回队头
-
5)Remove():移除并返回队头
(11)PriorityQueue 优先级队列
(12)在容器中自定义迭代器:可以继承abstractCollection接口实现迭代器方法,或者继承collection类进行覆盖,或者新增一个迭代器方法。
(13)Java容器的 简图