作者:My_Qzj | 来源:互联网 | 2022-11-19 10:19
我有一份清单.列表中有一个列表.
[[-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,Integer> final_sol=new HashMap<>();
for(int k1=0;k1
输出:
{[-1, 2, -1]=1, [0, 1, -1]=2, [-1, 0, 1]=0}
编写完这些代码块后,我认为我的重复键只能显示唯一键.
然后我怎么能使用哈希地图使这个列表独一无二?不明白
当我使用树形图时,它不会编译并给出了错误.
1> John Bolling..:
这是事实,地图不保留重复键和设置不保留重复的元素,但你要明白,"副本"的键/元素来定义的equals()
方法,以及基于散列的集合取决于有钥匙/元素hashCode()
与其equals()
方法一致的方法.
现在你说
[-1,0,1]
和[0,1,-1]
他们相同.
但是,不是,就平等的定义而言,它们并不相同List
.列表元素的顺序很重要,并且列表需要以equals()
反映该元素的方式实现.这就是为什么这些列表可能同时显示为键的原因Map
,并且两者都可能显示为相同的元素Set
.
然后我怎么能使用哈希地图使这个列表独一无二?
显然,订单对您的目的而言并不重要,因此您List
并不是真正适合您的模型.如果您不需要容纳重复元素,那么您应该考虑使用Sets.标准库提供了几种实现,HashSet
根据我的理解,它们可能最适合您的情况.如果你确实需要容纳重复的元素,那么你正在寻找一个multiset.标准库不提供实现,但有几个可从第三方获得.
当我使用树图时,它不会编译并给出一些错误.
是的,它会,除非你提供了一个Comparator
确定你的元素的相对顺序. TreeMap
将重复项识别为根据其自然或比较器指定的顺序进行比较的键.
总的来说,它听起来像是一组列表,而是一组集合或一组多集合.我不明白你为什么要把地图带进去.