如果一个程序只包含固定数量的且其生命周期都是已知的对象,那么这是一个非常简单的程序。(摘自《Java编程思想》)

什么是容器

先来观察下现实生活中的容器是什么样的。容器可以是一个装水的瓶子,可以是一个放玩具的纸箱子,也可以是运送物资的集装箱。我们会发现生活中处处都有容器的存在,他们是我们生活中不可或缺的重要部分。

同样在编程世界中,容器也是无处不在,是重要的工具。只不过它装的水、玩具或者物资,而是一个个对象。根据装的方式不同,分为Collection和Map两大类。

为什么要用容器

一般的开发中我们需要什么对象new一下就好了,没什么问题,但是当你有100个对象需要new的时候,你会怎么办呢?这个时候就是容器派上用场的时候了,我们可以直接定义一个容量为100的容器,省去重复劳动,提高效率。

当然,这只是例举的一个很简单的例子,容器真正的作用远不止这样,这需要我们慢慢发现。

容器的分类

容器一般分为两大类:Collection和Map。它们的作用都是保存对象,只是方式上不同。

Collection保存的是一个对象的序列,就好像是将一个个对象排成了一排;

Map保存的则是一对对的对象,每一对里面有两个元素,一个是名称(key),一个是具体的对象(value)。

Collection和Map都是接口,具体的实现有很多,不同之处在于排列的规则和数据结构不同。

先来看一张经典的图:

容器分类图(图片引用自网络)
容器分类图(图片引用自网络)

像ArrayList是通过数组实现的,查询速度很快,但是修改比较慢;而LinkedList是通过链表实现的,修改元素较快,但是查询较慢。在实际开发中,我们应该根据具体的业务选择不同的容器实现类。

容器基础知识概览

重新复习了容器知识后,我整理了一份容器基础知识的思维导图,供随时查阅。(附文本内容)

Java容器基础
Java容器基础

Java知识思维导图-集合基础篇
对象容器
Collection
List
特点:有序保存,元素可重复
主要实现类
ArrayList(随机访问快,插入和删除慢)
LinkedList(插入和删除快,随机访问慢)
getFirst()、element():返回第一个元素,列表为空时抛出NoSuchElementException
removeFirst()、remove():移除并返回第一个元素,列表为空时抛出NoSuchElementException
peek():返回第一个元素,列表为空时返回null
poll():移除并返回第一个元素,列表为空时返回null
addFirst()、add()、addLast():插入元素到头(尾)部
offer():在尾部添加一个元素
removeLast():移除并返回最后一个元素
Set
特点:元素不能重复
主要实现类
HashSet(最快获取元素)
TreeSet(按比较顺序保存)
LinkedHashSet(按照被添加的顺序保存)
Queue
特点:队列规则,先进先出(FIFO)
主要实现类
LinkedList(链表)
PriorityQueue(优先级队列)
迭代器
Iterator
特点:顺序遍历集合中的对象,而不必关心集合的确切类型,统一了对容器的访问方式
主要方法
next():获取下一个元素
hasNext():检查是否还有元素
remove():删除最近返回的元素,只能在next()方法后调用
ListIterator
特点:只能用于对List的访问,可以双向移动,可以替换元素,可以从指定位置开始索引
主要方法
next():获取下一个元素
previous():获取上一个元素
nextIndex():下一个元素的索引位置
previousIndex():上一个元素的索引位置
set():替换最后一个访问的元素
add():添加一个元素
Map
特点:将一个对象映射到其他对象
主要实现类
HashMap
LinkedHashMap
TreeMap
主要方法
containsKey():是否包含某个键
containsValue():是否包含某个值
keySet():返回键的集合
values():返回值的集合
entrySet():返回键值对的集合
工具类
java.util.Collections
addAll():添加另一个集合
toString():转换成字符串
java.util.Arrays
asList():将数组转换为List
toString():转换成字符串

参考文献

[1] Java编程思想 第4版 第11章