(1) Map<String, List<String>>
设一个HashMap
对象的结构为<String, List<String>>,
用变量map来表示这个HashMap
对象。
现取出这个map
中的一项键值对,其中键是一个String
对象,用变量s
表示, 值是一个List
对象,用变量list
来表示。
当对list
进行修改时(list.set(index, value))
, 不需要再进行map.put(s, list)
, map
中的这个键值对也会发生相应的变化。
原因: 键值对中的值与变量list
事实上指向了heap
中的同一个List
对象,当用变量list
来修改List
对象中的值时,map
中也会发生同样的变化。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Map<String, List<String>> map = new HashMap<>();
List<String> list = new ArrayList<>();
list1.add("修改前");
map.put("1", list);
// output map
System.out.println(map);
list = map.get("1");
// 修改list对象
list.set(0, "修改后");
// output map
System.out.println(map);
}
}
{1=[修改前]}
{1=[修改后]}
(2) Map<String, String>
设一个HashMap
对象的结构为<String, String>
, 用变量map
来表示这个HashMap
对象。
现取出这个map
中的一项键值对,其中键是一个String
对象,用变量sk
表示, 值也是一个String
对象,用变量sv
来表示。
当对sv
重新赋一个不同的值时,map
中的键值对不会发生变化。
原因: 给sv
重新赋值,相当于在heap
中新创建一个对象,让sv
指向这个对象,对map
不产生任何影响。
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
String sv = "修改前";
map.put("1", sv);
// output map
System.out.println(map);
sv = map.get("1");
sv = "修改后";
// output map
System.out.print(map);
}
}
{1=修改前}
{1=修改前}