热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javaHashSet中的重复项

如何解决《javaHashSet中的重复项》经验,为你挑选了1个好方法。

似乎HashSets中允许重复.为什么这样,我该如何去除它们,为什么第二个不能在remove()下面工作呢?删除所有重复项的一种方法是new HashSet<>(set),但有没有更好的方法不涉及创建新对象?

Set> set = new HashSet<>();
ArrayList a1 = new ArrayList<>();
ArrayList a2 = new ArrayList<>();

a1.add("a");
set.add(a1);
a1.remove("a");

set.add(a2);

System.out.println(set.size());
System.out.println(set);

ArrayList a3 = new ArrayList<>();
for (Object o : set) {
    boolean b = o.equals(a3) && (o.hashCode() == a3.hashCode());
    if (!b) System.out.println(false);
}

set.remove(new ArrayList());
System.out.println(set);
set.remove(new ArrayList());
System.out.println(set);
set.remove(set.iterator().next());
System.out.println(set);
System.out.println(set.iterator().next() == a1);

输出:set由两个相等的空列表组成,最初不为空的列表无法删除.

2
[[], []]
[[]]
[[]]
[[]]
true

Eran.. 6

元素存储在HashMap中的位置取决于hashCode添加时该元素的位置.

如果在添加元素之后,您更改了导致其hashCode更改的元素的属性(在ArrayList元素的情况下,从列表中删除元素就是这样),尝试在HashSet中找到该元素(或者删除它)将失败.



1> Eran..:

元素存储在HashMap中的位置取决于hashCode添加时该元素的位置.

如果在添加元素之后,您更改了导致其hashCode更改的元素的属性(在ArrayList元素的情况下,从列表中删除元素就是这样),尝试在HashSet中找到该元素(或者删除它)将失败.


推荐阅读
author-avatar
西瓜凉皮大夏天
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有