为什么我们在 HashMap 和 HashSet 中使用 equals() 方法而不实现比较器接口?

马杜马蒂

为什么我们在 HashMap 和 HashSet 中使用 equals() 方法而不实现比较器接口?我在上面的概念中看到了一些示例程序。但是没有比较器接口,他们使用 equals() 和 hashcode() 方法。我的问题是,我们可以在没有比较器接口的情况下使用这些方法吗?我们还可以使用具有可比接口的 equals() 和 hashcode() 以及 compareTo() 方法吗?

乔恩·斯基特

HashMap并且HashSet关心比较键或元素是否相等——他们不关心ordering,不像(比如TreeMapTreeSet)。这就是他们使用equals()的原因hashCode()

比较器都是关于排序的 - 完全有可能有一个没有特定order 的类,但确实有相等的概念。例如,一个 2DPoint类型没有特别自然的排序(如果你想为它定义比较器,你可以做 Y-then-X 或 X-then-Y)但确实有一个自然的相等运算。这意味着可以成为 a 中的键HashMapa 中的元素HashSet

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我们有==运算符时使用equals()方法?

为什么我们使用servletconfig接口和servletcontext接口

为什么我们必须在 Hibernate 中使用 @Cacheable 和 @Cache 来实现二级缓存?

为什么我们在Java中使用clone()方法?

在Hashset或其他Collections中使用继承的对象时,为什么Equals(object)胜过Equals(T)?

HashMap 忽略覆盖的 hashCode 和 equals 方法

尽管实现了hashCode()和equals(),HashSet仍添加重复项

为什么我们需要使用标记接口?

为什么我们在JPA存储库中使用服务层和DAO

为什么我们在 matlab 代码中使用 inf 和 power

为什么我们在Java中使用自动装箱和拆箱?

为什么我们在reactjs中使用node.js和babel

为什么我们在这个函数声明中使用 const 和 & ?

为什么我们在PHP中使用assert()和assert_options()?

为什么我们在GWT中使用ClientBundle和ImageResource?

为什么我们需要在两个选择中使用 () 和?

为什么Sun Java中的HashSet实现使用HashMap作为支持?

为什么对于equals方法我们需要一个Object参数?

为什么我们在Symfony2控制器的方法中使用“动作”?

为什么我们在Java中使用接口引用类型?

java.util.HashMap和HashSet的内部实现

HashSet和HashMap之间的区别?

为什么我们不能对接口中的方法一起使用默认访问修饰符和抽象关键字?

HashMap和HashSet有什么共同点?

为什么我们在Rails记录器中使用块而不是字符串?

为什么我们不能总是在C中使用寄存器存储类?

为什么我们在访问器中使用私有字段?

为什么我们不能在扩展类的静态方法中使用此实例?

为什么我们不能在(非静态)内部类中使用静态方法?