UTF-8-BOM導致HashMap的Key重複

今天遇到一個有趣的現象,HashMap的key居然重複了,2個同樣的字符串“全新好”作爲map的key值同時出現在map中,他們的hash值是不同的,這讓我很費解。


我是將如下數據放入txt中,然後使用BufferReader讀取數據插入map中,將每行第一個字符串(比如“全新好”)作爲Key,目的是去重複。

全新好 ambi 360
中國寶安 mbi 60
全新好 ambi 360
美麗生態 ambi 360
DeepTech深科技 mi 30
美麗生態 ambi 360

代碼如下:

while ((str = br.readLine()) != null){
                readLine = str.split(" ");
                if(dicMap.containsKey(String.valueOf(readLine[0]))){
                    continue;
                }
                // 詞語
                dm.setWords(readLine[0]);
                if(readLine.length == 3) {
                    // 權重
                    dm.setWeights(Integer.parseInt(readLine[2]));
                }
                // 詞性
                dm.setPartOfSpeech(readLine[1]);
                // 修改者
                dm.setModifyUser(userId);
                // 創建者
                dm.setCreateUser(userId);
                // 存入map
                dicMap.put(readLine[0], dm);
                dm = new DictionaryManagement();
            }

當讀到第二個“全新好 ambi 360”字符串時,map將它存了起來(兩個“全新好”作爲Key值時hash值居然是不同的)。但是“美麗生態”沒有出現重複的現象,這讓我很是費解。最後請教大佬得出原因以及解決辦法

因爲txt的編碼格式爲UTF-8-BOM。

BOM——Byte Order Mark,就是字節序標記。

UTF-8-BOM比UTF-8文件開頭多了三個字節前綴:0xEF0xBB0xBF

所以第一行數據“全新好”帶有了這個三個字節,導致它和第三行的“全新好”hash值不同。

解決辦法是將此txt編碼轉化爲UTF-8

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