ArrayList.clear()正在更新List <>的先前值

Ati*_*ukh 0 java android arraylist

我是JSONArray从服务器上来的.在JSON我收到的格式如下.

[ {
   "area_name":"abc",
   "coordinates":[
     {
     "lat":1.123,
     "lng":2.123,
     },
     {
     "lat":1.123,
     "lng":2.123,
     },
     .
     .
     ]
},
{
.
.
.
}
] 
Run Code Online (Sandbox Code Playgroud)

为了绘制地图上的区域,我正在添加区域areaList和它们的相应坐标coordinatesList

ArrayList<HashMap<String, LatLng>> coordinatesList; // initialised in onCreate
List<ArrayList<HashMap<String, LatLng>>> areaList; // initialised in onCreate

for (int i = 0; i < areaArray.size(); i++) {
     coordinatesList.clear();
     //coordinatesList = new ArrayList<>();
     //  parsing of json and other non-related stuff

      for (int j =0; j < pointsArray.size(); j++) {
          // Getting data from json and saving to hashmap and adding to coordinatesList
          coordinatesList.add(pointsHashMap);
     }

     areaList.add(coordinatesList);
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试从areaList某个函数获取此值.我得到所有位置的相同值.

log.d(TAG, "area " + areaList.get(i).get(0).get("lat_lng)); // its in a loop
Run Code Online (Sandbox Code Playgroud)

对于任何值,i我得到最后一个加值areaList.add(coordinatesList);.之前添加的所有值都将areaList被替换.

但是当我发表评论coordinatesList.clear();并取消评论时,coordinatesList = new ArrayList<>();一切都按预期进行.

有人可以详细说明一下,为什么会这样发生?

小智 5

因为每当你在循环中激活arraylist时,试着在onCreate()中激活arraylist ;

coordinatesList = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)