作者:mobiledu2502884717 | 来源:互联网 | 2022-11-07 11:27
我有一个List
将随时间更改的值,我想将其与时间值一起存储,并检查是否List
再次出现该值。
例如:
[1, 2, 3] is same as [1, 2, 3]
我认为既然List
是通过参考值传递的,所以我认为应该将键字符串化以使用。
例如:
Map = new HashMap<>()
(key:"stringified key", value: .....)
但是我发现它Map, Integer> map = new HashMap<>()
也可以工作,但是我不知道它为什么起作用,因为无论列表中的值发生了什么变化,键都应该引用相同的列表。
例如:
(key:[reference to key], value: .....)
List 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> Karol Dowbec..:
由于yoy更改了内容ArrayList
的值,因此ArrayList
hashCode
也更改了。
List 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
查找逻辑将无法工作。