zoukankan      html  css  js  c++  java
  • hashCode()方法与equals()方法的说明

    1,一般我们自己用时,只使用equals()方法,用于判断两个对象是否是业务上等价的。
    2,在重写equals()方法时,强烈推荐也要重写hashCode()方法,因为有的集合用到了hashCode()来提高效率。
    equals为true的对象的hashCode值一定要一样。
    equals为false的对象的hashCode值尽量不一样。
    3,可以使用工具自动生成hashCode()与euqals()方法。

     1 package com.zsy.study;
     2 
     3 public class User {
     4     private Integer id;
     5     private String name;
     6     public Integer getId() {
     7         return id;
     8     }
     9     public User(){}
    10     public User(Integer id) {
    11         super();
    12         this.id = id;
    13     }
    14     public void setId(Integer id) {
    15         this.id = id;
    16     }
    17     public String getName() {
    18         return name;
    19     }
    20     public void setName(String name) {
    21         this.name = name;
    22     }
    23     
    24 }

    测试代码

     1 public class TestEquals {
     2 
     3     @Test
     4     public void test() throws Exception {
     5         Set<User> set = new HashSet<User>();
     6 
     7         // User user = new User(1);
     8         // set.add(user);
     9         // set.add(user);
    10 
    11         set.add(new User(1));
    12         set.add(new User(1));
    13         set.add(new User(1));
    14 
    15         System.out.println(set.size());
    16     }
    17 
    18     @Test
    19     public void test2() throws Exception {
    20         System.out.println("aa" == "aa"); // true
    21         System.out.println(new String("aa") == new String("aa")); // false
    22         System.out.println("aa" == new String("aa")); // false
    23 
    24         System.out.println("aa".equals(new String("aa"))); // true
    25     }
    26 
    27     @Test
    28     public void test3() throws Exception {
    29         Set<User> set = new HashSet<User>();
    30 
    31         User user = new User(); // id = 0
    32         set.add(user);
    33 
    34         // session.save(user); // id = 5
    35         user.setId(5);
    36         set.add(user); // user.hashCode() == eltOldhashCode;
    37 
    38         // set.add(user);
    39         System.out.println(set.size());
    40     }
    41 }

    需导入junit.jar 测试类

  • 相关阅读:
    01背包问题学习笔记
    状态压缩动态规划学习笔记
    并查集算法详解
    洛谷 P2939 [USACO09FEB]改造路Revamping Trails
    算法竞赛进阶指南 通信线路
    算法竞赛进阶指南 道路与航线
    NOIP2009 T3 最优贸易
    NOIP2017 Day1 T3 逛公园
    5.Go 语言数据类型:数组与切片
    4. Go 语言数据类型:byte、rune与字符串
  • 原文地址:https://www.cnblogs.com/oumyye/p/4189634.html
Copyright © 2011-2022 走看看