• hashcode、equals、HashMap间的关系


    1、从Object说起
    package com.hallo.collection;

    public class ObjectDemo {

    public static void main(String[] args) {

    Object o1 = new Object();
    Object o2 = new Object();

    //同一Object对象,hashCode永远相同
    assert(o1.hashCode() == o1.hashCode());
    //不同Object对象,hashCode永远不相同
    assert(o1.hashCode() != o2.hashCode());

    //不同对象equals返回false
    assert(!o1.equals(o2));

    System.out.println("end");

    }
    }
    输出:end

    2、String类Demo
    package com.hallo.collection;

    public class StringDemo {

    public static void main(String[] args) {

    String str1 = "hello";
    String str2 = "hello";
    String str3 = new String("hello");

    //不同string对象(==不成立)保存相同字符串时,hashCode和equals返回相同
    assert(str1.hashCode() == str2.hashCode());
    assert(str1.equals(str2));
    assert(str2.hashCode() == str3.hashCode());
    assert(str2.equals(str3));

    System.out.println("end");
    }
    }
    输出:end

    3、自定义类,重写hashcode、equals方法
    package com.hallo.collection;

    import java.util.HashMap;
    import java.util.Map;

    public class MyObject {

    private String name;

    public String getName() {
    return name;
    }

    public MyObject(String name) {
    this.name = name;
    }

    @Override
    public int hashCode() {
    //使用object类的方法
    return super.hashCode();
    }

    @Override
    public boolean equals(Object obj) {

    if(this == obj)
    return true;

    if(obj instanceof MyObject) {
    return ((MyObject) obj).getName(http://www.amjmh.com).equals(this.getName());
    }

    return false;
    }

    public static void main(String[] args) {

    MyObject o1 = new MyObject("k1");
    MyObject o2 = new MyObject("k1");
    MyObject o3 = new MyObject("k3");

    Map<MyObject, String> myObjectMap = new HashMap<MyObject, String>();
    myObjectMap.put(o1, "o1");
    myObjectMap.put(o1, "o11");
    myObjectMap.put(o2, "o2");
    myObjectMap.put(o3, "o3");

    System.out.println(myObjectMap);
    }

    }
    输出:

    {com.hallo.collection.MyObject@7852e922=o11,

    com.hallo.collection.MyObject@70dea4e=o3,

    com.hallo.collection.MyObject@4e25154f=o2}
    ---------------------

  • 相关阅读:
    创建新用户
    发生tcp丢包(拥堵、超时)重传
    centos7装机和初步运维
    论上山和下山哪个费力
    一、Linux简介
    服务器设置FTP
    自定义部署资源服务器
    代码管理工具 Git
    远程连接工具rdcman
    dubbo学习(八)dubbo项目搭建--消费者(服务消费者)
  • 原文地址:https://www.cnblogs.com/ly570/p/11331596.html
Copyright © 2020-2023  润新知