如何解决有关Java中set的问题,Set如何工作以区分重复的元素?
有人可以向我解释Set如何在Java中工作吗?代码如下:
while (true) {
if(require('./config.json').loop) {
moveMouse();
console.log('looped');
} else continue;
}
输出: [[1,2,3] [[I @ 7852e922,[I @ 6d06d69c]
我的问题是Set如何区分ArrayList / List?但是不能区分数组吗?我以为两者都是通过引用传递的,而且两者都是对象吗?
解决方法
将新对象添加到set<SomeClass>
时,它将在equals()
类上调用SomeClass
方法。如果返回false(即不存在相同的值),则会将该对象添加到集合中。
https://docs.oracle.com/javase/8/docs/api/java/util/AbstractList.html#equals-java.lang.Object-
// equals() method of AbstractList class is called here because the set is // of List type
Set<List<Integer>> set = new HashSet<>();
set.add(list);
set.add(list1); //list.equals(list1) is true at this point
// This is the reason you got unique values
---------------
// whereas when you add a plain array which is just a plain java object,equals() // gets called on Object class which compares by reference
// This is the reason you don't get unique values
Set<int[]> set1 = new HashSet<>();
set1.add(arr);
set1.add(arr1);
此外,在Set<Employee>
的情况下,employee是用户定义的类。如果未在Employee类中使用自定义规则定义equals()方法,则将调用equals()
类继承的Object
方法,并且该集合将没有唯一值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。