• 如果两个对象具有相同的哈希码,但是不相等的,它们可以在HashMap中同时存在吗?


    如果两个对象具有相同的哈希码,但是不相等的,它们可以在HashMap中同时存在吗?

    ----答案是 可以

    原因:

    在hashmap中,由于key是不可以重复的,他在判断key是不是重复的时候就判断了hashcode这个方法,而且也用到了equals方法。

    这里不可以重复是说equals和hashcode只要有一个不等就可以了。

    一、当我们向一个set、HashMap、HashSet、HashTable集合中添加某个元素,集合会首先调用该对象的hashCode方法,

    这样就可以直接定位它所存储的位置,若该处没有其他元素,则直接保存。
    若该处已经有元素存在,就调用equals方法来匹配这两个元素是否相同,相同则不存,不同则散列到其他位置

    二、hashCode重要么?
    对于List集合、数组而言,他就是一个累赘,不重要;但是对于HashMap、HashSet、HashTable而言,它变得异常重要。

     
     

    测试代码:

    package com.rainy.test;
    
    import java.util.HashSet;
    import java.util.Set;
    
    public class App {
        public static void main(String[] args) {
            Set<A> set = new HashSet<A>();
            A a1 = new A();
            A a2 = new A();
            a1.a = "1";
            a2.a = "2";
            
            set.add(a1);
            set.add(a2);
            
            for (A a : set) {
                System.out.println(a.a);
            }
        }
    }
    
    class A {
        
        public String a;
        
        @Override
        public boolean equals(Object obj) {
            A obja = (A)obj;
            return this.a.equals(obja.a);
        }
        
        @Override
        public int hashCode() {
            return 1;
        }
        
    }

    代码结果:

    2
    1

  • 相关阅读:
    JS 表单submit() 提交无效的问题
    thinkphp中连接oracle时封装的方法无法用
    Struts2 开发流程(转)
    oracle wm_concat(column)函数的使用(转)
    js点击按钮后显示时间自动减少提示
    Windows Server 2008 R2安装过程
    Spring学习之旅(1) 第一个Controller
    Groovy系列 Groovy集合
    Groovy系列 安装Groovy
    VMWare实现共享目录
  • 原文地址:https://www.cnblogs.com/rainy-shurun/p/5426629.html
Copyright © 2020-2023  润新知