hashCode()方法(覆盖hashCode()方法)

import java.util.*;

import java.lang.Comparable;

/**

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

 *

 * @author skywang

 * @emai [email protected]

 */

public class ConflictHashCodeTest2{

    public static void main(String[] args) {

        // 新建Person对象,

扫描二维码关注公众号,回复: 5255305 查看本文章

        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]

猜你喜欢

转载自www.cnblogs.com/chengshixiaonongming/p/10410571.html
今日推荐