Java 在服装类的ArrayList上使用Map有什么好处

Java 在服装类的ArrayList上使用Map有什么好处,java,hashmap,maps,Java,Hashmap,Maps,我现在正在学习Java,我正在学习不同类型的集合,到目前为止,我学习了LinkedList、ArrayList和Array[]。 现在我已经介绍了集合的散列类型,HashSet和HashMap,但我不太明白为什么它们有用,因为它们支持的命令列表非常有限,而且,它们是按随机顺序排序的,我需要重写equal和HashKey方法,以便使它能够正确地与类一起工作。 现在,我不明白的是使用这些类型而不是服装类的ArrayList的麻烦带来的好处。 我的意思是,Map所做的是将两个对象连接为1,但创建一个包

我现在正在学习Java,我正在学习不同类型的集合,到目前为止,我学习了LinkedList、ArrayList和Array[]。 现在我已经介绍了集合的散列类型,HashSet和HashMap,但我不太明白为什么它们有用,因为它们支持的命令列表非常有限,而且,它们是按随机顺序排序的,我需要重写equal和HashKey方法,以便使它能够正确地与类一起工作。 现在,我不明白的是使用这些类型而不是服装类的ArrayList的麻烦带来的好处。 我的意思是,Map所做的是将两个对象连接为1,但创建一个包含这两个对象作为参数的类,并使用getter来修改和使用它们不是更好吗? 如果好处是这个散列对象只能包含一个同名的对象,那么在添加它之前,让ArrayList检查该类型是否已经存在不是更容易吗

到目前为止,我学会了选择何时使用LinkedList、ArrayList或Array[],规则是“如果确实简单,请使用Array[],如果更复杂,请使用ArrayList(例如,保存某个类的集合)如果列表是动态的,里面有很多对象,需要根据中间删除或添加一个新的或在列表中来回移动的顺序更改顺序,然后使用Link键列表。
但是我不知道什么时候更喜欢HashMap或HashSet,如果你能给我解释一下,我会很高兴的。

第一个HashSet。在HashSet中,你可以很容易地得到它是否包含给定的元素。让我们在你的班里安排一组人,你想问你的班上是否有人。你可以制作一个字符串数组列表。如果y如果你想问你班上是否有人,你必须遍历整个列表直到找到他,这对于较长的列表来说可能太慢了。如果改用HashSet,操作会快得多。你计算搜索字符串的散列,然后直接转到散列,所以你不需要传递太多元素来回答你的问题当然,您也可以做一个变通方法,使ArrayList更快地访问,但这已经准备好了

现在是HashMap。现在假设您还想为每个人存储一个分数。因此,现在您可以使用HashMap。您输入名称并在短时间内获得他的分数,而无需遍历整个数据结构


这有意义吗?

关于你的问题:

“但我不知道什么时候更喜欢HashMap或HashSet,我 如果你能给我解释一下,我会很高兴的。”

HashMap实现Map接口,用于在恒定时间内将键(K)映射到值(V),并且顺序无关紧要,因此如果现在使用键,则可以高效地放置和检索这些数据

HashSet实现了Set接口,但在内部使用和HashMap,它的作用是作为一个集合使用,这意味着你不应该检索元素,你只需要检查元素是否在集合中(大部分)

在HashMap中,可以有相同的值,而在集合中不能有相同的值(因为它是集合的属性)

关于这个问题:

如果好处是这个散列对象只能包含一个同名的对象,>那么在添加它之前,让ArrayList检查类型是否已经>会更容易吗

在处理收集时,您可能会根据数据表示方式以及您希望访问和存储这些数据的方式来选择特定的方法,如何访问这些数据?是否需要对它们进行排序?因为每个实现可能具有不同的复杂性(),这一点变得很重要

使用文档

对于ArrayList:

加法运算在摊销的固定时间内运行,也就是说,添加n个元素需要O(n)个时间。所有其他运算在线性时间内运行(粗略地说)

对于HashMap:

此实现为基本操作(get和put)提供恒定的时间性能,前提是哈希函数将元素正确地分散在存储桶之间。在集合视图上进行迭代需要的时间与HashMap实例的“容量”(存储桶的数量)加上其大小(键值映射的数量)成比例。因此,如果迭代性能很重要,那么不要将初始容量设置得太高(或负载系数太低),这一点非常重要

这是关于时间复杂性的


对于某些问题,您可以选择更不典型的集合:)。

这与Java没有什么特别的关系,选择主要取决于性能要求,但有一个基本的区别必须强调。从概念上讲,列表是保持插入顺序的集合类型,可能有重复项,集合更像是没有特定顺序和重复项的项目包。当然,不同的实现可能会找到解决方法(如树集)

首先,让我们检查ArrayList和LinkedList之间的区别。链表是一组节点,其中每个节点都包含一个值以及指向下一个和上一个节点的链接。这使得在链表中插入一个元素只需将一个节点追加到列表的末尾,这是一个快速操作,因为内存不必被占用在另一方面,访问特定元素需要遍历整个列表,直到找到它为止

顾名思义,数组列表包装数组。使用数组的索引访问数组中的元素是直接访问,但插入元素意味着调整数组的大小以包含新元素,因此它占用的内存是连续的,在这种情况下,写操作会有点重

HashMap的工作原理类似于字典,其中每个键都有一个值