【问题标题】:Custom Class Used in A List/HashSetList/HashSet 中使用的自定义类
【发布时间】:2013-03-06 21:07:24
【问题描述】:

我有一个如下所示的自定义类:

public class customClass(){
    private int keyCode;
    private boolean up;
    private String toTrigger;

    public String getTrigger();
    public boolean up();
    public int keyCode();
}

拥有唯一值列表的最佳性能方式是什么?

我在考虑一个 HashSet,但我如何确保它是我的 customClass 的唯一唯一实例?

我需要覆盖什么?等于和哈希码?这会确保我的 CustomClass 哈希集只有唯一的实例吗?

谢谢

【问题讨论】:

  • 这可能对你有帮助:stackoverflow.com/a/27609/1068167
  • 基本上,是的:覆盖equalshashCode 就足够了,但要确保正确覆盖它们,这并不容易。 (参见上面 span 的链接)
  • 啊谢谢 :) 那么在散列集中,散列集使用什么来确定其是否相等?哈希码还是等于?
  • 问题:您需要实例唯一还是实例唯一的值?你在你的问题中提到了这两个。例如Dummy d1 =new Dummy("a"); and Dummy d2= new Dummy("a"); 它们可以相等,但它们是不同的实例。 d1 和 d2 可以保留在您的列表/集合中吗?

标签: java list equals hashcode hashset


【解决方案1】:

如果 a.equals(b) 为真,那么 hashcode() 必须 也相同。

  • 在您的自定义类中同时覆盖 .equals() 和 .hashCode()。

    使用自定义类的相同字段来计算用于在 .equals() 中检查相等性的 hashCode。

  • 是的,它会确保只有您的唯一实例 哈希集中的 customClass。所以去吧。

【讨论】:

  • 。如果两个对象相等,hashCode()必须相同。
猜你喜欢
  • 2014-12-30
  • 2012-10-09
  • 2016-02-02
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
  • 2015-09-07
相关资源
最近更新 更多