zoukankan      html  css  js  c++  java
  • Java集合:equals与hashCode重写问题

    分别执行:

    1. 没有重写equals也没有重写hashCode

    aa行:输出false

    1. 重写equals没有重写hashCode

    aa行:输出true;
    此时借助Set来观察是否有区别:属性值相同的两个对象hashCode不相等,导致Set中出现重复存储

    1. 重写equals也重写hashCode

    aa行:输出true;
    此时Set中只有一个[Student: id = 1, name = 张三]

    import java.util.HashSet;
    import java.util.Iterator;
    
    // 为什么重写equals要重写hashCode?
    public class Why {
    	public static void main(String[] args) {
    		Student s1 = new Student(001, "张三");
    		Student s2 = new Student(001, "张三");
    	
    		System.out.println(s1.equals(s2));  // aa
    		System.out.println("------");
    		
    		HashSet<Student> students = new HashSet<>();
    		students.add(s1);
    		students.add(s2);
    		
    		Iterator iterator = students.iterator();
    		while (iterator.hasNext()) {
    			System.out.println(iterator.next().toString());
    		}
    		System.out.println("------");
    	}
    
    }
    
    class Student {
    	private int id;
    	private String name;
    	public Student(int id, String name) {
    		super();
    		this.id = id;
    		this.name = name;
    	}
    	
    	// 基于id来判断两个对象是否相同
    	
    	@Override
    	public boolean equals(Object obj) {
    		return obj.equals(id);
    	}
    	
    	@Override
    	public int hashCode() {
    		// TODO Auto-generated method stub
    		return id;
    	}
    	
    	@Override
    	public String toString() {
    		return "[Student: id = " + id + ", name = " + name + "]";
    	}
    	
    }
    
    步履不停
  • 相关阅读:
    go语言的特殊变量 iota
    JS设计模式(三) 数据访问对象模式
    SSM之整合Redis
    JS设计模式(二) 惰性模式
    Ubuntu 安装 SQL Server
    JS设计模式(一) 单例模式
    JavaScript 面向对象编程
    SSM之框架整合
    Java实现CORS跨域请求
    数据库记录删除方式
  • 原文地址:https://www.cnblogs.com/yuanyunjing/p/15324243.html
Copyright © 2011-2022 走看看