gpt4 book ai didi

java - HashSet 与 int 数组的用法

转载 作者:搜寻专家 更新时间:2023-11-01 01:33:41 28 4
gpt4 key购买 nike

因为我有一个包含重复项的 int 数组的 ArrayList,所以我想使用 HashSet。不幸的是,我无法如愿使用 HashSet:

System.out.print("\nTESTs\n");
ArrayList<int[]> list = new ArrayList<int[]>();
list.add(new int[]{1,2,3});
list.add(new int[]{5,1,1});
list.add(new int[]{1,2,3});//duplicate
list.add(new int[]{5,1,3});

Set<int[]> set = new HashSet<int[]>(list);
System.out.println("Size of the set = "+set.size());

ArrayList<int[]> arrayList = new ArrayList<int[]>(set);
System.out.println("Size of the arrayList = "+arrayList.size());

for (int[] array:arrayList){
System.out.println(Arrays.toString(array));
}

结果是:

Size of the set = 4
Size of the arrayList = 4
[1, 2, 3]
[1, 2, 3] // duplicate still here
[5, 1, 1]
[5, 1, 3]

谁能告诉我哪里错了?

提前致谢多米尼克(java新手)

最佳答案

数组不会覆盖 Object 类中实现的 hashCodeequals,因此,两个数组 a1 和 a2 将被视为相同仅当 a1==a2 时才通过 HashSet 相互关联,这在您的情况下是错误的。

如果您使用 ArrayList 而不是数组,您的问题将得到解决,因为对于 ArrayList 而言,相等性是由列表成员的相等性决定的(并且它们出现的顺序)。

关于java - HashSet 与 int 数组的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28344312/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com