我有这个代码。当我清除ArrayList
时,HashMap
中的值也会清除。我如何保存数据?
public class Stations extends AppCompatActivity {
public static Map<String, ArrayList<String>> cities = new HashMap<>();
...
public void parseFrom() {
cities.clear();
ArrayList<String> citiesList = new ArrayList<>();
try {
JSONObject jObject = new JSONObject(loadJSON());
JSONArray jArray = jObject.getJSONArray("citiesFrom");
String countryTitle = null;
for (int i = 0; i < jArray.length(); i++) {
JSONObject jsonObject = jArray.getJSONObject(i);
if ((countryTitle != null) && (!countryTitle.equals(jsonObject.getString("countryTitle")))) {
cities.put(countryTitle, citiesList);
citiesList.clear();
}
countryTitle = jsonObject.getString("countryTitle");
citiesList.add(jsonObject.getString("cityTitle"));
}
} catch (JSONException e) {
e.printStackTrace();
}
}
当我使用citiesList.clear();
时,所有值都清除,但键仍然“活着”。
答案 0 :(得分:1)
这是因为它们在内存中具有相同的引用。
尝试这样做:
cities.put(countryTitle, new ArrayList<String>(citiesList));
但是,如果您真正想要的是将其从哈希地图中删除,那么您必须拨打cities.remove(countryTitle)
而不是仅清除城市数组。