向 List 中添加 HashMap 出現 List 內容全變爲最後一次添加的 HashMap 的問題

今天在寫一個方法的時候需要構造一個 List 包含一組 HashMap 的情況 ,和這個問題類似

How to add HashMap to ArrayList

ArrayList<HashMap<String, String>> prodArrayList = new ArrayList<HashMap<String, String>>();

HashMap<String, String> prodHashMap = new HashMap<String, String>();

public void addProd(View ap)
{
    // test arraylist of hashmaps
    prodHashMap.put("prod", tvProd.getText().toString());

    prodArrayList.add(prodHashMap);

    tvProd.setText("");

    // check data ///

    Log.e("myLog","Data prodArrayList in ADD Method Size = "+prodArrayList.size());

    for(int i=0; i< prodArrayList.size();i++)
    {
         Log.e("myLog","Data prodArrayList in ADD Method = "+prodArrayList.get(i).toString());
    }
}

具體情況可以點進去看下 ,會出現這個問題的原因是 HashMap 添加到 List 中的時候實際上只是一個引用 ,而每次更新 HashMap 時使用的 Key 又相同的情況下會出現所有的 HashMap 實際上引用的是同一個 HashMap ,且值只有一個 。

問題找到了 ,解決問題的方法就有了 ,有這兩種方法來避免這個問題 。

public void addProd(View ap)
{
    // test arraylist of hashmaps
    HashMap<String, String> prodHashMap = new HashMap<String, String>();
    prodHashMap.put("prod", tvProd.getText().toString());

    prodArrayList.add(prodHashMap);

    tvProd.setText("");

    // check data ///

    Log.e("myLog","Data prodArrayList in ADD Method Size = "+prodArrayList.size());

    for(int i=0; i< prodArrayList.size();i++)
    {
         Log.e("myLog","Data prodArrayList in ADD Method = "+prodArrayList.get(i).toString());
    }
}

一是 每次更新 HashMap 時使用不同的 key ,這樣 List 只需要引用一個 HashMap 即可 。

二是 在每一次都新建一個 HashMap 來保存數據,之後再將 HashMap 添加到 List 中 ,避免使用 List.add 的時候改變了數據 ,就可以避免這個問題了。

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