hashcode和equals方法

分析:

1:Person类

1:姓名和年龄

2:重写hashCode和equals方法

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);

}

}

时间: 2024-10-07 02:50:45

hashcode和equals方法的相关文章

重写hashCode与equals方法的作用

为了阐明其作用,我们先来假设有如下一个Person类. class Person { public Person(String name, int age) { this.name = name; this.age = age; } private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; }

key的hashcode与equals方法改写

get方法过程:首先计算key的hashcode,找到数组中对应位置的某一元素,然后通过key的equeals方法在对应的链表中找到需要的元素.所以,hashcode与equals方法对于找到对应元素是两个关键的方法. HsahMap的key可以是任何类型,例如User对象,为了保证两个具有相同属性的User对象的hashcode相同,我们需要改写hashcode方法,比方说把hashcode的值的计算与User对象的id关联起来,那么只要user对象拥有相同的id,那么他们的hashcode就

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

hashCode()和equals()方法可以说是Java完全面向对象的一大特色.它为我们的编程提供便利的同时也带来了很多危险.这篇文章我们就讨论一下如何正解理解和使用这2个方法. 如何重写equals()方法 如果你决定要重写equals()方法,那么你一定要明确这么做所带来的风险,并确保自己能写出一个健壮的equals()方法.一定要注意的一点是,在重写equals()后,一定要重写hashCode()方法.具体原因稍候再进行说明. 我们先看看 JavaSE 7 Specification中

Java 中正确使用 hashCode 和 equals 方法

在这篇文章中,我将告诉大家我对hashCode和equals方法的理解.我将讨论他们的默认实现,以及如何正确的重写他们.我也将使用Apache Commons提供的工具包做一个实现. 目录: hashCode()和equals()的用法 重写默认实现 使用Apache Commons Lang包重写hashCode()和equals() 需要注意记住的事情 当使用ORM的时候特别要注意的 hashCode()和equals()定义在Object类中,这个类是所有java类的基类,所以所有的jav

理解Java中的hashCode和equals 方法

在Java里面所有的类都直接或者间接的继承了java.lang.Object类,Object类里面提供了11个方法,如下: Java代码   ```` 1,clone() 2,equals(Object obj) 3,finalize() 4,getClass() 5,hashCode() 6,notify() 7,notifyAll() 8,toString() 9,wait() 10,wait(long timeout) 11,wait(long timeout, int nanos) ``

为什么要重写hashcode和equals方法?初级程序员在面试中很少能说清楚。

我在面试 Java初级开发的时候,经常会问:你有没有重写过hashcode方法?不少候选人直接说没写过.我就想,或许真的没写过,于是就再通过一个问题确认:你在用HashMap的时候,键(Key)部分,有没有放过自定义对象?而这个时候,候选人说放过,于是两个问题的回答就自相矛盾了. 最近问下来,这个问题普遍回答不大好,于是在本文里,就干脆从hash表讲起,讲述HashMap的存数据规则,由此大家就自然清楚上述问题的答案了. 1 通过Hash算法来了解HashMap对象的高效性 我们先复习数据结构里

HashMap中使用自定义类作为Key时,为何要重写HashCode和Equals方法

之前一直不是很理解为什么要重写HashCode和Equals方法,才只能作为键值存储在HashMap中.通过下文,可以一探究竟. 首先,如果我们直接用以下的Person类作为键,存入HashMap中,会发生发生什么情况呢? public class Person { private String id; public Person(String id) { this.id = id; } } import java.util.HashMap; public class Main { public

(转)为什么要重写 hashcode 和 equals 方法?

作者丨hsm_computer cnblogs.com/JavaArchitect/p/10474448.html 我在面试Java初级开发的时候,经常会问:你有没有重写过hashcode方法?不少候选人直接说没写过.我就想,或许真的没写过,于是就再通过一个问题确认:你在用HashMap的时候,键(Key)部分,有没有放过自定义对象?而这个时候,候选人说放过,于是两个问题的回答就自相矛盾了. 最近问下来,这个问题普遍回答不大好,于是在本文里,就干脆从hash表讲起,讲述HashMap的存数据规则

面试官:为什么要重写hashcode和equals方法?

 一个几乎必问的面试题  在面试 Java初级开发的时候,经常会问的一个问题是:你有没有重写过 hashcode方法?不少候选人直接说没写过.或许真的是没写过,于是还可以再通过一个问题确认:你在用HashMap的时候,键( Key)部分,有没有放过自定义对象?而这个时候,候选人说放过,于是两个问题的回答就自相矛盾了. 其实很多人这个问题普遍回答得都不大好,于是在本文里,就干脆 从 hash表讲起,讲述HashMap的存数据规则,由此大家就自然清楚上述问题的答案了.  再过一遍Hash算法  先复