List中循環添加Map集合時出現數據覆蓋問題原因分析及解決方法

我們可能會遇到當我們向list集合中運用add()方法循環添加map集合時會出現後添加的map集合數據覆蓋前面添加的數據問題,最終讓添加的數據都一樣且都是最後一條數據,接下來我就對此問題進行原因分析以及解決方法。

問題展現
不多說,先放向list集合添加map集合時出現問題的代碼

String[] s ={"12","13","14","11"};
        List list = new ArrayList<Map<String, Object>>();

        Map map = new HashMap<String, Object>();

        for (int i = 0; i <s.length ; i++) {
            map.put("值",s[i]);
            list.add(map);
        }

        問題原因
顯然可見,這並不是我們所需要的結果,出現了後添加的map集合覆蓋之前map數據問題,具體原因是因爲我們在new的一個map集合是在for循環外,這樣map集合其地址值是同一個,在進行向map集合添加時就等於我們向同一地址值的map添加數據,由此就會出現覆蓋之前map數據的問題。
解決問題
解決此問題主要從根源上讓list在添加map集合時,使其map集合地址值不同,這樣我們添加時就實現了添加不同的map到list集合中,我的做法是將new的map集合放在for循環裏面,這樣我們在每次執行for循環時都會新new了一個map集合,保證了其map地址值不同就可以了。
其演示如下:

此時我們在控制檯打印結果如下:list=[{值=11}, {值=11}, {值=11}, {值=11}]

		String[] s ={"12","13","14","11"};
        List list = new ArrayList<Map<String, Object>>();
        
        for (int i = 0; i <s.length ; i++) {
//          將new的map集合放在for循環裏面
            Map map = new HashMap<String, Object>();
            map.put("值",s[i]);
            list.add(map);
        }

此時控制檯打印結果如下:list=[{值=12}, {值=13}, {值=14}, {值=11}]


由此list添加map集合時覆蓋問題就解決了。

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