【发布时间】:2019-06-26 12:33:37
【问题描述】:
我有一个列表列表。列表中有一个列表。
[[-1, 0, 1], [-1, 2, -1], [0, 1, -1]],此列表的名称表示结果。结果列表包含重复元素作为列表。 [-1,0,1] 和 [0,1,-1] 它们是相同的。我想制作一个不包含重复项的列表。所以列表结果变为 [[-1,0,1],[-1,2,-1]] 或 [[-1,2,-1],[0,1,-1]] 。
我读到 Hashmap 不能存储重复键但允许重复值。因此,要删除重复项,我正在尝试使用 Hashmap。
但是写完代码后运行良好没有报错。
HashMap<List<Integer>,Integer> final_sol=new HashMap<>();
for(int k1=0;k1<result.size();k1++){
final_sol.put(result.get(k1),k1);
}
System.out.println(final_sol);
输出:
{[-1, 2, -1]=1, [0, 1, -1]=2, [-1, 0, 1]=0}
编写此代码块后,我认为我的重复键不能只显示唯一键。
那我怎样才能使这个列表使用哈希映射唯一呢?Fail to understand
当我使用树形图时,它无法编译并给出一些错误。
【问题讨论】:
-
[-1,0,1]和[0,1,-1]不相同。[-1,0,1]和[-1,0,1]' are the same.[0,1,-1]` 和[0,1,-1]是相同的。列表是有序的,因此在比较列表时值顺序很重要。 --- 如果要考虑[-1,1,0]和[0,1,-1]相同,请先排序它们,使它们都变为[-1,0,1],然后添加到HashMap. -
此外,它还取决于您将什么用作 List 的具体类。我们无法从您给定的代码中知道,因为我们只能看到 List 界面 :) 但我假设您使用 ArrayList 所以我完全同意@Andreas。
-
@YavuzTas 即使原始列表不是
ArrayList,您也可以在排序前复制到ArrayList,而原始列表保持不变。 -
@Andreas 当然,在这些情况下,复制可能是一种解决方法,所以我再次同意
-
[0, 1, 1] 是否与 [0, 0, 1] 或 [0, 1] 相同?
标签: java hashmap duplicates