相关疑难解决方法(0)

如何确保hashCode()与equals()一致?

当覆盖java.lang.Object的equals()函数时,javadocs建议,

通常需要在重写此方法时覆盖hashCode方法,以便维护hashCode方法的常规协定,该方法声明相等的对象必须具有相等的哈希代码.

hashCode()方法必须为每个对象返回一个唯一的整数(这在基于内存位置比较对象时很容易,只需返回对象的唯一整数地址)

应该如何覆盖hashCode()方法,以便它仅基于该对象的特性为每个对象返回一个唯一的整数


public class People{
   public String name;
   public int age;

   public int hashCode(){
      // How to get a unique integer based on name and age?
   }
}
/*******************************/
public class App{
   public static void main( String args[] ){
       People mike = new People();
       People melissa = new People();
       mike.name = "mike";
       mike.age = 23;
       melissa.name = "melissa";
       melissa.age = 24;
       System.out.println( mike.hasCode() );  // output?
       System.out.println( melissa.hashCode(); // output?
   }
}
Run Code Online (Sandbox Code Playgroud)

java equals object hashcode

23
推荐指数
3
解决办法
7073
查看次数

集合何时允许重复?

所以这更像是一个"试图理解"的问题,而不是"我需要一个解决方案"的问题.对于作业,我们要求创建一个产品列表,其中包含a itemNumber和a price,但每个产品只有一个,因此没有相同的项目itemNumber.我想我可以创建一个集合,这将摆脱重复问题.但如果我添加producta1,4.99和productb1,2.99,则会添加两个产品.

这是否意味着,该集合确定这些产品是不同的b/c它们具有不同的价格,因此可以添加到集合中?

java set

4
推荐指数
2
解决办法
122
查看次数

Hashcode平等是否意味着引用基于参考的平等?

我读到要在java中使用equals()方法我们还必须覆盖hashcode()方法,并且相等(逻辑)对象应该具有eual哈希码,但这并不意味着基于引用的相等!这是我的重写equals()方法的代码,我应该如何覆盖hashcode方法:

@Override    
public boolean equals(Object o)
        {
            if (!(o instanceof dummy))
                return false;
            dummy p = (dummy) o;
            return (p.getName() == this.getName() && p.getId() == this.getId() && p.getPassword() == this.getPassword());

        } 
Run Code Online (Sandbox Code Playgroud)

我只是想了解它是如何工作的,所以只有三个字段,即名称,id密码,只是试图比较我在main()中定义的两个对象!我还需要知道是否总是需要覆盖hashcode()方法和equals()方法?

java methods overriding object

3
推荐指数
1
解决办法
746
查看次数

标签 统计

java ×3

object ×2

equals ×1

hashcode ×1

methods ×1

overriding ×1

set ×1