1.容器和集合

容器或集合是允许您同时存储和处理多个对象的类。您已经知道两种容器:数组和列表。

Java 有几十个集合,每个集合都以自己特定的方式存储元素。这里有几个:

收藏 班级 描述
List
ArrayList
列表
LinkedList
链表
Vector
向量
Stack
Set
HashSet
TreeSet
LinkedHashSet
Queue
PriorityQueue
队列
ArrayQueue
Map
HashMap
地图/字典
TreeMap
HashTable

这里的名字有些模棱两可。在大多数编程语言中,所有这些数据结构都称为集合,但在 Java 中不是。在 Java 中,其中一些类实现了Collection接口,而另一些则没有。

相应地,集合又分为广义集合和狭义集合(仅实现了Collection接口的集合)。

因此,为避免混淆,当我们谈到集合时,我们指的是狭义的词,即实现Collection接口的类。List,Set和类型Queue都是集合。广义上的集合一般称为容器。这些包括类型Map和数组。


2.HashSet收藏

该类HashSet是一个典型的集合。在许多方面,它与类相似ArrayList。在某些方面,它是一个更原始的版本。

您可以HashSet使用如下语句创建对象:

HashSet<Type> name = new HashSet<Type>();

Type我们将存储在集合中的元素的类型在哪里HashSet

该类HashSet有这样的方法:

方法 描述
void add(Type value)
value元素添加到集合中
boolean remove(Type value)
value从集合中移除元素。
返回true是否存在这样的元素
boolean contains(Type value)
检查集合是否有value元素
void clear()
清除集合,删除所有元素
int size()
返回集合中元素的数量

这是使用集合的示例。

让我们编写一个程序,如果他或她打招呼,就向用户说再见。为了让它更有趣,我们将让我们的程序能够理解多种语言的“你好”。

代码 笔记
HashSet<String> set = new HashSet<String>();

set.add("Hallo");
set.add("Hello");
set.add("Hola");
set.add("Bonjour");
set.add("Ciao");
set.add("Namaste");

Scanner console = new Scanner(System.in);
String str = console.nextLine();

if (set.contains(str))
   System.out.println("Goodbye!");
创建一个HashSet存储String元素的对象。


我们将各种语言的问候语添加到set变量中。




从控制台读取一行。


如果字符串在我们的问候语中,那么我们就说再见。


3.设置

Set系列旨在容纳一组元素。这就是为什么它被称为Set(集合)。这个集合具有三个特点。

集合上的操作

您只能对集合做三件事:向集合中添加元素、从集合中删除元素以及检查集合是否包含特定元素。就是这样。

没有订单

此集合中的元素没有索引。您无法通过索引获取元素,也无法将值写入特定索引处的集合。集合没有get()set()方法。

独特元素

集合中的所有元素都是唯一的。与列表不同,集合只能包含一个元素的一个实例。一个对象要么在集合中,要么不在集合中——没有第三种选择。您不能将黑色三次添加到一组颜色中。它要么存在要么不存在。

查找元素

当您添加新元素、删除元素或检查元素是否存在于集合中时,将在该方法中执行对元素的搜索。传递的元素首先通过 与集合的元素进行比较hashCode(),然后如果匹配返回的值hashCode(),则通过equals()



4.比较集合:ListvsSet

让我们比较两种类型的收藏:List我们Set将看看主要区别,当一种比另一种更有优势,反之亦然。

让我们尝试以玩具为例来比较 List 和 Set。

List(列表)集合就像一组玩具,沿着游戏室的墙壁排列。您可以将玩具添加到列表的末尾。如果实在需要,也可以插在中间(但有些已有的玩具就得挪动了)。

每个玩具都有一个索引。您可以通过索引引用玩具,也可以将 7 号玩具替换为 13 号玩具。您可以从列表中删除 4 号玩具。最后,您可以了解列表中每个玩具的索引。

Set(set) 集合更像是地板中间的一堆玩具。您可以向堆中添加一个玩具,也可以从堆中取出一个玩具。但是这些玩具没有与之相关的固定索引。

或者假设您正在为孩子的生日选择玩具。首先,您要考虑他是否已经拥有玩具。他已经拥有的所有玩具组成了一套你不会选择购买的玩具。

从这个角度来看,您可以看到一组“已经存在的玩具”中玩具的顺序无关紧要,生日男孩是否拥有特定玩具的两个实例也无关紧要。您对每个玩具的顺序或数量不感兴趣。您关心的是了解套装中存在的每个独特玩具。

对于这种情况,您需要Set集合。它最流行的实现是HashSet类。