【发布时间】:2016-06-21 11:07:21
【问题描述】:
是否可以从HashMap 获取值列表作为参考
class MyCustomObject {
String name;
Integer id;
MyCustomObject(String name, Integer id){
this.name = name;
this.id = id;
}
}
HashMap<Integer, MyCustomObject> map = new LinkedHashMap<>();
map.put (1, new MyCustomObject("abc",1));
map.put (2, new MyCustomObject("xyz",2));
List<MyCustomObject> list = new ArrayList<>(map.values());
Log.i(TAG,"************ List from HashMap ************");
for (MyCustomObject s : list) {
Log.i(TAG,"name = "+s.name);
}
list.set(0,new MyCustomObject("temp",3));
Log.i(TAG,"************ List from HashMap after update ************");
for (MyCustomObject s : list) {
Log.i(TAG,"name = "+s.name);
}
Log.i(TAG,"************ List from HashMap ************");
List<MyCustomObject> list2 = new ArrayList<>(map.values());
for (MyCustomObject s : list2) {
Log.i(TAG,"name = "+s.name);
}
输出
**************** List from HashMap ***************
name = abc
name = xyz
**************** List from HashMap after update ***************
name = temp
name = xyz
**************** List from HashMap ***************
name = abc
name = xyz
如果从HashMap 获取值列表,则返回深拷贝。
更新
我的要求
- 我想要 HashMap 中的值列表,因为我想使用它们的位置访问项目
- 我想保留值的顺序
- 如果我修改提取列表中的任何内容,那么它也应该反映在 HashMap 中
请告知是否有任何第三方库提供此类数据结构,或者处理这种情况的最佳方法是什么
【问题讨论】:
-
List<MyCustomObject> list = new ArrayList<>(map.values());你觉得这条线有什么作用? -
是浅拷贝,你到底想要什么?
-
问题是哈希图不知道索引,因此您无法获得由地图支持的列表。即使有可能
list.set(0, whatever)对地图没有多大意义,因为无论如何您都需要访问/检查密钥,在这种情况下,您只需调用map.put(key, whatever)。 -
我想要的是,如果我从列表中更新 MyCustomObject,它也应该反映在 HashMap 中
标签: java hashmap linkedhashmap shallow-copy