【java SE】Map集合踩过的坑~


Map元素添加~

package Review;

import java.util.HashMap;
import java.util.Map;

public class MapTest {
    
    

	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
		
	    // 1.创建一个Map集合
		Map<String, String> hashMap = new HashMap<String, String>();
	    // 2.添加元素
		hashMap.put("1", "嘿嘿");
		hashMap.put("1", "哈哈");
		hashMap.put("1", "呵呵");
		// 3. 测试
		System.out.println("输出结果为:"+hashMap.get("1"));
		
	}

}
package Review;

import java.util.HashMap;
import java.util.Map;

public class MapTest {
    
    

	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
		
		// 1.创建一个Map集合
		Map<Object, String> hashMap = new HashMap<Object, String>();
	    // 2.添加元素
		hashMap.put(1, "嘿嘿");
		hashMap.put("1", "哈哈");
		hashMap.put(1, "呵呵");
		// 3. 测试
		System.out.println("输出结果1为:"+hashMap.get("1"));
		System.out.println("输出结果2为:"+hashMap.get(1));
		
	}

}

有如上两段代码测试,请问输出的结果各是什么?

我们都知道,Map 集合的特点:

  • 能够存储唯一的列数据(唯一,不可重复)set
  • 能够存储可以重复的数据(可重复)list
  • 值的顺序取决于键的顺序
  • 键和值都是可以存储 null 元素的
  • 一个映射不能包含重复的键,每个键最多只能映射一个值

还有大部分的说法是:当key相同时,Map集合会对加入的元素进行覆盖处理。但是这是有前提的:

  • 1.当key的类型相同
  • 2.且加入的key值相同时

拿上面的案例来说,第一段代码中的Map集合泛型<k,v>均为String类型,然后依次向集合中添加了三个K值均为“1”但Value值不同的元素,按照之前说的,这里key均为String类型,并且key值相同,所以第一段代码中的结果会依次进行覆盖,最终输出的结果为:呵呵

再来看第二段代码,与第一段代码相比有几处改动:1.Map集合的key泛型定义为了Object类型2.添加元素的时候key值有两种,分别是1、“1”。也就是说此时的key值可以是任意类型的数据,如果按照普通的理解1“1”不都是一样的吗?简单地认为还是进行覆盖操作,结果还是“呵呵”。但是运行后,就傻眼了,结果1:哈哈,结果2:呵呵 !?就像上面所说的,覆盖的操作必须要满足两个条件。换句话说,覆盖的操作只会发生在相同类型的且值相同的key的元素添加过程中。


猜你喜欢

转载自blog.csdn.net/qq_45797116/article/details/114698822