關於map的細節-map.get(Object key)爲null

  • 現象
    map.get(Object key)爲null,我很確定這個key是我傳進去並且自認爲是與put進去的值相等。
  • 過程
    我有一個用於儲存成績信息的座標(key)及成績值(value)的LinkedHashMap:
private LinkedHashMap<Location, String> gradesMap = new LinkedHashMap<>();

Location類如下(爲了篇幅,去掉了getter和setter方法):

public class Location {

        public Location(Integer row, Integer column) {
            this.row = row;
            this.column = column;
        }

        private Integer row;

        private Integer column;
        
        @Override
        public boolean equals(Object obj) {
            Location location = (Location) obj;
            return column.equals(location.getColumn()) && row.equals(location.getRow());
        }
     }

重寫了equals是爲了使得當Location兩個屬性分別相等時對象引用就相同。即形如locationA.equals(locationB)這種。我還做了測試:

		Location a = new Location(1,1);
        Location b = new Location(1,1);
        LOGGER.info("相等不:{}", a.equals(b));

輸出結果爲true。
這裏是爲了解析如下圖所示的excel裏面的數據使用:
學生課程成績信息
按行解析後,將在這裏插入圖片描述
最後按照預想的做法取出map中的值:
在這裏插入圖片描述
結果發現這個value始終爲null。
很不甘心,又做了個實驗:
在這裏插入圖片描述
輸入結果也爲null,這時候開始懷疑人生了,按道理說,key都是同一個了,爲啥獲取到值還是空的。於是就去翻這個map.get(Object key)方法:
在這裏插入圖片描述
這是LinkedHashMap中的get方法源碼,一眼我就瞧見了這個醒目的hash單詞,果斷去Location類重寫了下hashCode方法:
在這裏插入圖片描述
運行成功!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章