【发布时间】:2014-02-17 05:09:09
【问题描述】:
我想使用自定义比较器过滤来自HashSet 的重复对象。
在Mobile 类中,我定义了一个非静态嵌套Comparator 类用于比较。此比较器使用的标准是Mobile 对象的id 字段。
Set<Mobile> treeSet = new TreeSet<>(new Mobile().new Comparator()); // works
Set<Mobile> hashSet = new HashSet<>(new Mobile().new Comparator()); // does not work
尽管它对TreeSet 非常有效,但当我使用HashSet 尝试此操作时,Eclipse 会显示语法错误,
如果我想使用HashSet,我似乎需要覆盖Mobile 类中的equals 和hashcode 方法。不过,我更喜欢使用比较器。
为什么会这样?
【问题讨论】:
-
请解释我......如果你能帮助我回答我的问题或者我的意思是如果我想将 list 转换为 hashset ,使用自定义重复标准,最好的方法是什么......
-
我不明白你想做什么,你想在集合中存储
Mobile对象还是Comperator对象?如果是第一个,在Mobile类中实现hashcode和equals(您可以将Comperator实现用于equals)。HashSet没有接受Comperator作为第一个参数的构造函数,这也没有任何意义。TreeSet确实如此,因为它使用比较器对对象进行排序(但HashSet是无序的) -
这里是 java api:docs.oracle.com/javase/7/docs/api。
Comparator是一个接口,不能仅通过new调用来实例化(必须定义必要的函数)。 -
@Teepeemm
Comparator是Mobile类的内部类的名称。 -
@MarkoTopolnik
Mobile有一些文档吗?它不在JDK中,搜索“Java Mobile api”并没有给出api(不是我能识别的)。