是否有可能从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 list = new ArrayList <>(map.values());'你认为这行代表什么? –
Fildor
这是浅拷贝,你想要什么? – Boola
剧透:https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#ArrayList(java.util.Collection) – Fildor