当前位置: 首页 > 知识库问答 >
问题:

检测HashMap是否包含相同列表的更好方法[重复]

龙俊德
2023-03-14

我有一个将超时更改的List,我想将其与时间值一起存储并检查是否再次出现相同的List

前任:

[1, 2, 3] is same as [1, 2, 3]

我想既然List

例如。:

Map<String, Integer> = new HashMap<>()
(key:"stringified key", value: .....)

但我发现

例如:

(key:[reference to key], value: .....)
List<Integer> testList = new ArrayList<>();
testList.add(0);
map.put(testList, 0);
testList.set(0, 1);
if(map.containsKey(testList))System.out.println("duplicate");
else System.out.println("unique");

上面的结果将打印“唯一”,但我认为应该打印“重复”。为什么上面的结果会显示这一点?


共有1个答案

傅嘉悦
2023-03-14

由于yoy更改了ArrayList的内容,ArrayList的值也发生了更改。

List<Integer> l = new ArrayList<>();
l.add(0); 
System.out.println(l.hashCode()); // 31
l.set(0, 1);
System.out.println(l.hashCode()); // 32

这违背了HashMap的原则,其中hashCode用于查找元素的位置。用于HashMap键的对象应该具有常量hashCode,否则HashMap查找逻辑将不起作用。

 类似资料:
  • 如何检查数组中的所有元素是否相同? 这是我想到的唯一解决办法。我想知道有没有有效的?

  • rank ▲ ✰ vote url 15 789 144 1269 url 检查列表是否为空的最好方法 例如,传递下面: a = [] 我怎么检查a是空值? if not a: print "List is empty" 用隐藏的空列表的布尔值才是最Pythonic的方法.

  • 这是一个简化的示例,但假设我想在100x100网格上生成5个唯一位置。这些位置将存储在数组[[x, y],…]中。 尝试了生成随机 x 和 y 并检查数组 [x, y] 是否已经在结果数组中的明显方法。如果是,则生成不同的值,如果不生成,则将其添加到结果数组中。 但是,这将永远不会找到重复项,因为数组在技术上是不同的对象。那么,检测数组是否包含“相等”数组/对象的首选方法是什么?

  • 问题内容: 基本上,我大约有1,000,000个字符串,对于每个请求,我都必须检查一个String是否属于列表。 我担心性能,最好的方法是什么??哈希? 问题答案: 最好的选择是使用并通过方法检查集合中是否存在字符串。建立HashSet可以通过使用Object方法和进行快速访问。状态的Javadoc : 此类为基本操作(添加,删除,包含和调整大小)提供了恒定的时间性能, HashSet 将对象存储

  • 它们大多是下划线,但有时有一个元素不是下划线。我只想处理那些有“内容”的。目前,我使用for-loops检查是否存在非下划线元素。有没有更有效率的办法?

  • 假设w、x、y和z都可以在列表a中。是否有一个快捷方式来检查它是否只包含x--例如。而不否定其他变量? w、x、y和z都是单个值(不是列表、元组等)。