hashcode和equals方法

Posted 眼泪笑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hashcode和equals方法相关的知识,希望对你有一定的参考价值。

分析:

1Person

1:姓名和年龄

2:重写hashCodeequals方法

1:如果不重写,调用Object类的equals方法,判断内存地址,为false

1:如果是Person类对象,并且姓名和年龄相同就返回true

2:如果不重写,调用父类hashCode方法

1:如果equals方法相同,那么hashCode也要相同,需要重写hashCode方法

3:重写toString方法

1:不重写,直接调用Object类的toString方法,打印该对象的内存地址

Person

class Person {

private String name;

private int age;

 

public Person() {

 

}

 

public Person(String name, int age) {

 

this.name = name;

this.age = age;

}

 

@Override

public int hashCode() {

return this.name.hashCode() + age;

}

 

@Override

public boolean equals(Object obj) {

if (!(obj instanceof Person)) {

return false;

}

Person p = (Person) obj;

return this.name.equals(p.name) && this.age == p.age;

}

 

@Override  

public String toString() {

return "Person :name=" + name + ", age=" + age;

}

 

}

 

 

public static void main(String[] args) {

Person p1 = new Person("张三", 19);

Person p2 = new Person("李四", 20);

Person p3 = new Person("王五", 18);

Collection list = new ArrayList();

list.add(p1);

list.add(p2);

list.add(p3);

// isEmpty() 判断集合是否为空

boolean empty = list.isEmpty();

System.out.println(empty);

// 返回集合容器的大小

int size = list.size();

System.out.println(size);

         // contains()判断集合何中是否包含指定对象

boolean contains = list.contains(p1);

System.out.println(contains);

 

// remove(); 将指定的对象从集合中删除

list.remove(p1);

 

// clear() 清空集合中的所有元素

list.clear();

System.out.println(list);

 

}

 

//使用集合存储自定义对象2

class Book {

private String name;

private double price;

 

public Book() {

 

}

 

public Book(String name, double price) {

this.name = name;

this.price = price;

}

 

public String getName() {

return name;

}

 

public void setName(String name) {

this.name = name;

}

 

public double getPrice() {

return price;

}

 

public void setPrice(double price) {

this.price = price;

}

 

@Override

public int hashCode() {

return (int) (this.name.hashCode() + price);

}

 

@Override

public boolean equals(Object obj) {

if (!(obj instanceof Book)) {

return false;

}

Book book = (Book) obj;

return this.name.equals(book.name) && this.price == book.price;

}

 

@Override

public String toString() {

return "book:@ name:" + this.name + ", price:" + this.price;

}

}

public class Demo1 {

public static void main(String[] args) {

Collection col = new ArrayList();

col.add(new Book("think in java", 100));

col.add(new Book("core java", 200));  System.out.println(col);

}

}

以上是关于hashcode和equals方法的主要内容,如果未能解决你的问题,请参考以下文章

重写了equals方法为何需要重写 hashCode

详解equals()方法和hashCode()方法

【彻底理解】 为啥重写equals()方法为啥要重写hashCode()方法

hashcode和equals方法

详解equals()方法和hashCode()方法

重写equals()方法和 hashCode()方法