久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

更新 Java HashMap 鍵

Updating Java HashMap key(更新 Java HashMap 鍵)
本文介紹了更新 Java HashMap 鍵的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我只是想知道,如果 HashMap 的鍵是可變的會發生什么,下面的測試程序證明了這一點,我無法理解 equals 和 hashCode 方法何時返回true 和相同的值,為什么 hashmap.containsKey 返回 false.

I was just wondering, what would happen if key of a HashMap is mutable, test program below demonstrate that and I am unable to understand when both equals and hashCode methods returns true and same value, why does hashmap.containsKey return false.

public class MutableKeyHashMap {

    public static void main(String []a){

            HashMap<Mutable, String> map = new HashMap<Mutable, String>();
            Mutable m1 = new Mutable(5);
            map.put(m1, "m1");
            Mutable m2 = new Mutable(5);
            System.out.println(map.containsKey(m2));    

            m2.setA(6);
            m1.setA(6);
            Mutable m3 = map.keySet().iterator().next();

            System.out.println(map.containsKey(m2)+"    "+m3.hashCode()+"       "+m2.hashCode()+"       "+m3.equals(m2));   

    }
}
class Mutable {

    int a;

    public Mutable(int a) {

        this.a = a;
    }

    @Override
    public boolean equals(Object obj) {

        Mutable m = (Mutable) obj;
        return m.a == this.a ? true : false; 
    }

    @Override
    public int hashCode(){
        return a;
    }

    public void setA(int a) {

        this.a = a;
    }

    public int getA() {
        return a;
    }
} 

這是輸出:

真假 6 6 真

推薦答案

javadoc 解釋它

注意:如果將可變對象用作映射鍵,則必須非常小心.如果對象的值以影響等于比較的方式更改,而對象是映射中的鍵,則不會指定映射的行為.

Note: great care must be exercised if mutable objects are used as map keys. The behavior of a map is not specified if the value of an object is changed in a manner that affects equals comparisons while the object is a key in the map.

基本上,不要在 Map 中使用可變對象作為鍵,否則會被燒毀

Basically, don't use mutable objects as keys in a Map, you're going to get burnt

推斷,因為文檔可能看起來不清楚,我相信這里的相關點是以影響 equals 的方式更改",并且您似乎假設每次調用 contains 時都會調用 equals(Object).文檔沒有這么說,措辭暗示它們可能被允許緩存計算.

To extrapolate, because the docs may not appear clear, I believe the pertinent point here is `changed in a manner that affects equals', and you seem to be assuming that equals(Object) is called each time contains is invoked. The docs don't say that, the wording implies they may be allowed to cache computations.

查看source,似乎是因為您的hashCode 返回一個不同的值(以前是 5,現在是 6),可能是根據實現細節在不同的存儲桶中查找它.

Looking at the source, it seems that because your hashCode returns a different value (was 5, now 6), it's possible that it's being looked up in a different bucket based on implementation details.

這篇關于更新 Java HashMap 鍵的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Convert List of Strings into Map using Java-8 Streams API(使用 Java-8 Streams API 將字符串列表轉換為 Map)
Getting data from JSON(從 JSON 獲取數據)
java linkedhashmap iteration(javalinkedhashmap迭代)
Converting a list of objects to Map(將對象列表轉換為 Map)
Create a HashMap with a fixed Key corresponding to a HashSet. point of departure(用一個固定的Key對應一個HashSet創建一個HashMap.出發點)
HttpMessageConverter exception : RestClientException: Could not write request: no suitable HttpMessageConverter found(HttpMessageConverter 異常:RestClientException:無法寫入請求:找不到合適的 HttpMessageConverter) - IT屋-程序員
主站蜘蛛池模板: 亚洲网站在线观看 | 男人av的天堂 | 久久精品com | 色.com| 国产激情一区二区三区 | 久久久观看 | 欧美成人一区二区 | 欧美一级在线观看 | 一区二区三区视频在线观看 | 91免费电影| 免费一级网站 | 无码国模国产在线观看 | 毛片一区二区三区 | 欧美日韩国产中文字幕 | 日韩精品成人 | 人人人艹 | 日本久草视频 | www.日日夜夜 | 日韩欧美国产综合 | 亚洲国产网址 | 毛片一级片 | 四虎影视一区二区 | 欧美4p | 美女一区二区在线观看 | 在线欧美小视频 | 视频一区二区在线观看 | 殴美黄色录像 | 久久亚洲精品国产精品紫薇 | 国产三级一区二区 | 中文字幕在线观看一区 | 日韩视频精品在线 | 在线播放中文字幕 | 欧美激情精品久久久久 | 精品一区av| 亚洲美女视频 | 国产精品视频999 | 国产区视频在线观看 | 国产精品精品久久久 | 日韩一二区 | 欧美综合视频 | 国偷自产av一区二区三区 |