博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hashCode()方法(覆盖hashCode()方法)
阅读量:6987 次
发布时间:2019-06-27

本文共 1620 字,大约阅读时间需要 5 分钟。

import java.util.*;

import java.lang.Comparable;

/**

 * @desc 比较equals() 返回true 以及 返回false时, hashCode()的值。

 *

 * @author skywang

 * @emai kuiwu-wang@163.com

 */

public class ConflictHashCodeTest2{

    public static void main(String[] args) {

        // 新建Person对象,

        Person p1 = new Person("eee", 100);

        Person p2 = new Person("eee", 100);

        Person p3 = new Person("aaa", 200);

        Person p4 = new Person("EEE", 100);

        // 新建HashSet对象

        HashSet set = new HashSet();

        set.add(p1);

        set.add(p2);

        set.add(p3);

        // 比较p1 p2, 并打印它们的hashCode()

        System.out.printf("p1.equals(p2) : %s; p1(%d) p2(%d)\n", p1.equals(p2), p1.hashCode(), p2.hashCode());

        // 比较p1 p4, 并打印它们的hashCode()

        System.out.printf("p1.equals(p4) : %s; p1(%d) p4(%d)\n", p1.equals(p4), p1.hashCode(), p4.hashCode());

        // 打印set

        System.out.printf("set:%s\n", set);

    }

    /**

     * @desc Person类。

     */

    private static class Person {

        int age;

        String name;

        public Person(String name, int age) {

            this.name = name;

            this.age = age;

        }

        public String toString() {

            return name + " - " +age;

        }

        /**

         * @desc重写hashCode

         */  

        @Override

        public int hashCode(){  

            int nameHash =  name.toUpperCase().hashCode();

            return nameHash ^ age;

        }

        /**

         * @desc 覆盖equals方法

         */  

        @Override

        public boolean equals(Object obj){  

            if(obj == null){  

                return false;  

            }  

            //如果是同一个对象返回true,反之返回false  

            if(this == obj){  

                return true;  

            }  

            //判断是否类型相同  

            if(this.getClass() != obj.getClass()){  

                return false;  

            }  

            Person person = (Person)obj;  

            return name.equals(person.name) && age==person.age;  

        }

    }

}

结果:

p1.equals(p2) : true; p1(68545) p2(68545)

p1.equals(p4) : false; p1(68545) p4(68545)
set:[aaa - 200, eee - 100]

转载于:https://www.cnblogs.com/chengshixiaonongming/p/10410571.html

你可能感兴趣的文章
C++ 一个自己实现的字符串类
查看>>
KVM
查看>>
Go语言知识积累:windows开发环境搭建
查看>>
我的友情链接
查看>>
字节流
查看>>
大型网站架构演变和知识体系
查看>>
抛砖引玉:Session和Cookie在WEB开发中的最佳实践
查看>>
一次小***处理
查看>>
哈希(Hash)与加密(Encrypt)的基本原理、区别及工程应用
查看>>
电子商务系统的设计与实现(八):前端商城系统功能细化
查看>>
深入理解 Kubernetes CPU Mangager
查看>>
java web中过滤敏感词汇的简单方法
查看>>
Nginx配置文件nginx.conf中文详解
查看>>
linux anaconda kickstart基础
查看>>
DITA vs DocBook
查看>>
调整Outlook 2010的pst文件大小
查看>>
python笔记二 基础
查看>>
nohup /dev/null 2>&1 含义详解
查看>>
Micropython教程之TPYBoard DIY超声波测距仪实例演示
查看>>
我的友情链接
查看>>