• 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}
    ---------------------

  • 相关阅读:
    EasyUI Combobox组合框(模糊搜索、默认值绑定)
    Asp.Net下载文件时中途失败问题
    VS使用小技巧之——设置调试时启动项目和启动页
    VS使用小技巧之——给代码添加region
    VS使用小技巧之——引入整个文件夹
    VS使用小技巧之——任务列表
    FineUI给表格行内链接设置弹出窗体
    cnpm私服搭建和发布包
    阿里云产品术语和docker
    angularjs1.x的一些知识点整理
  • 原文地址:https://www.cnblogs.com/ly570/p/11331596.html
Copyright © 2020-2023  润新知