这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战。
没学之前,自己内心总会弱弱的害怕这个概念。因为面对男朋友这个 Java 老手,对自己学习进度的检测,他经常会问我:“学到容器了吗?” 我一方面抱有一种不服气的心态:没呢没呢,快学到了;另一方面,又隐隐觉得这是 Java 里很重要的概念,貌似很庞大,学了也容易忘啊。
开了个头发现,这种害怕啊,担心啊是多余的。
因为复杂的概念,总是由简单的、基本的概念堆积起来的。
(这句话说完,自我感觉非常良好,以至于加了引用😆) 其实我们之前已经接触过类似的概念了。我想一开始,都学过 String,而后呢,也学过了 StringBuilder 和 StringBuffer。其实他们就是 char 的“容器”呀。
他们实现了对 char 的收集、处理,更方便的使用,也有着线程安不安全的差异。
那么,正经的容器,同理,只不过放的是任意的数据类型。它在 String 这些概念的上一层,又抽象了一些罢了。做的事情也无非是增删改查。
难点在于,区分常见的、常用的容器。以及明白容器下的实现,各有什么特点,什么情况下用哪一种。
什么是容器
生活中,想到容器,就会想到什么碗🥣、杯子、盆、收纳箱等等。但是呢,优秀的整理家小能手,就会把同一类东西放在使用时对应的盆。比如,水果都放水果篮里,臭衣服都放脏衣篓里。
这样用的时候,只要知道要干嘛,就能很快的去执行。比如说:
- 新买了脏衣篓,new了一个 脏衣篓;
- 周一到周六,都在往里面堆东西,这个时候相当于
脏衣篓.add(脏衣服i) - 周日了,执行一下
脏衣篓.clear()。
Java 容器就是放同一数据类型的一种结构。
最常见的两个接口: Collection、Map。
Collection 下面最常用的有:
-
List
最常见的有:ArrayList 、 LinkedList 和 Vector。
-
Set
最常见的:HashSet。
Map 最常用的:
- HashMap。
大学学过数据结构的话,这些都非常好理解。就是不同数据结构的具体实现。
通用的方法调用(以 List 为例)
list 是一种有序的结构,有序就意味着存在索引。那么就可以通过对索引的操作,实现值的存和取。
1 add,增加一个元素:
2 remove,删除操作,传 index 进去:
删除了索引为 2 元素。
3 set,赋值操作(修改):
4 查找某个元素在列表的位置: