1.容器和集合
容器或集合是允许您同时存储和处理多个对象的类。您已经知道两种容器:数组和列表。
Java 有几十个集合,每个集合都以自己特定的方式存储元素。这里有几个:
收藏 | 班级 | 描述 |
---|---|---|
|
|
列表 |
|
链表 | |
|
向量 | |
|
堆 | |
|
|
放 |
|
||
|
||
|
|
队列 |
|
||
|
|
地图/字典 |
|
||
|
这里的名字有些模棱两可。在大多数编程语言中,所有这些数据结构都称为集合,但在 Java 中不是。在 Java 中,其中一些类实现了Collection
接口,而另一些则没有。
相应地,集合又分为广义集合和狭义集合(仅实现了Collection
接口的集合)。
因此,为避免混淆,当我们谈到集合时,我们指的是狭义的词,即实现Collection
接口的类。List
,Set
和类型Queue
都是集合。广义上的集合一般称为容器。这些包括类型Map
和数组。
2.HashSet
收藏
该类HashSet
是一个典型的集合。在许多方面,它与类相似ArrayList
。在某些方面,它是一个更原始的版本。
您可以HashSet
使用如下语句创建对象:
HashSet<Type> name = new HashSet<Type>();
Type
我们将存储在集合中的元素的类型在哪里HashSet
。
该类HashSet
有这样的方法:
方法 | 描述 |
---|---|
|
将value 元素添加到集合中 |
|
value 从集合中移除元素。返回 true 是否存在这样的元素 |
|
检查集合是否有value 元素 |
|
清除集合,删除所有元素 |
|
返回集合中元素的数量 |
这是使用集合的示例。
让我们编写一个程序,如果他或她打招呼,就向用户说再见。为了让它更有趣,我们将让我们的程序能够理解多种语言的“你好”。
代码 | 笔记 |
---|---|
|
创建一个HashSet 存储String 元素的对象。我们将各种语言的问候语添加到 set 变量中。从控制台读取一行。 如果字符串在我们的问候语中,那么我们就说再见。 |
3.设置
该Set
系列旨在容纳一组元素。这就是为什么它被称为Set
(集合)。这个集合具有三个特点。
集合上的操作
您只能对集合做三件事:向集合中添加元素、从集合中删除元素以及检查集合是否包含特定元素。就是这样。
没有订单
此集合中的元素没有索引。您无法通过索引获取元素,也无法将值写入特定索引处的集合。集合没有get()
和set()
方法。
独特元素
集合中的所有元素都是唯一的。与列表不同,集合只能包含一个元素的一个实例。一个对象要么在集合中,要么不在集合中——没有第三种选择。您不能将黑色三次添加到一组颜色中。它要么存在要么不存在。
查找元素
当您添加新元素、删除元素或检查元素是否存在于集合中时,将在该方法中执行对元素的搜索。传递的元素首先通过 与集合的元素进行比较hashCode()
,然后如果匹配返回的值hashCode()
,则通过equals()
。
4.比较集合:List
vsSet
让我们比较两种类型的收藏:List
我们Set
将看看主要区别,当一种比另一种更有优势,反之亦然。
让我们尝试以玩具为例来比较 List 和 Set。
List
(列表)集合就像一组玩具,沿着游戏室的墙壁排列。您可以将玩具添加到列表的末尾。如果实在需要,也可以插在中间(但有些已有的玩具就得挪动了)。
每个玩具都有一个索引。您可以通过索引引用玩具,也可以将 7 号玩具替换为 13 号玩具。您可以从列表中删除 4 号玩具。最后,您可以了解列表中每个玩具的索引。
Set
(set) 集合更像是地板中间的一堆玩具。您可以向堆中添加一个玩具,也可以从堆中取出一个玩具。但是这些玩具没有与之相关的固定索引。
或者假设您正在为孩子的生日选择玩具。首先,您要考虑他是否已经拥有玩具。他已经拥有的所有玩具组成了一套你不会选择购买的玩具。
从这个角度来看,您可以看到一组“已经存在的玩具”中玩具的顺序无关紧要,生日男孩是否拥有特定玩具的两个实例也无关紧要。您对每个玩具的顺序或数量不感兴趣。您关心的是了解套装中存在的每个独特玩具。
对于这种情况,您需要Set
集合。它最流行的实现是HashSet
类。
GO TO FULL VERSION