哈希表HashMap的get()方法使用须知

问题导向

HashMap的get(key)方法返回key对应的value的值
那么如果选择一个变量接收该值,并修改该变量,原哈希表中的value的值是否会受到影响呢?

代码尝试

	@Test
	/*
	 * 测试哈希表HashMap的get(key)的注意点
	 */
	public void testHashMapGet() {
		// 1. 哈希表的value为String
//		HashMap<Integer,String> myMap = new HashMap<Integer, String>();
//		myMap.put(1,"一");
//		myMap.put(2,"二");
//		String str = myMap.get(1);
//		str = null;
//		System.out.println(myMap); //一,不影响

		// 2. 哈希表的value为HashSet
		HashMap<Integer,HashSet<Integer>> myMap2 = new HashMap<Integer, HashSet<Integer>>();
		HashSet<Integer> set1 = new HashSet<Integer>();
		set1.add(1);
		set1.add(2);
		myMap2.put(1,set1);
		HashSet<Integer> mySet = myMap2.get(1);//此时返回的mySet相当于指向myMap中的集合set,修改mySet,会影响myMap中的集合set
		//mySet.clear();
		mySet.add(10);
		System.out.println(myMap2);//清空和更改都会影响

		// 3. 哈希表的value为数组
//		HashMap<Integer, Integer[]> myMap3 = new HashMap<Integer, Integer[]>();
//		Integer[] arr = { 1, 2, 3 };
//		myMap3.put(1, arr);
//		Integer[] myArr = myMap3.get(1);// 此时返回的mySet相当于指向myMap中的集合set,修改mySet,会影响myMap中的集合set
//		myArr[0] = 10;
//		for (int n : myMap3.get(1)) {
//			System.out.println(n);// 会影响
//		}
		//4. 使用迭代器Iterator遍历同样会影响value值
		//5. 如果value是类的话应该也会影响

	}

分析结果

  1. 从代码执行结果来看,如果value类型为基本数据类型,不会影响到原值
  2. 如果是String类型,也不会影响原值
  3. 如果是数组或集合等会影响到原值
  4. 使用迭代器Iterator同样也会影响

原理分析

应该和HashMap的API设计有关,还没有详细分析研究

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值