Java集合框架之Map接口详解(方法示例)

求关注啊

Map接口

  • java.util.Map接口
  • 内部实现:数组+链表
  • 和Collection最大的不同就是Map存储的是键值对(我之前文章将他称为情侣约会,家庭聚会),而Collection存储的是单个单元(我们称它为单身patty).

常用方法:

添加方法:

1.添加方法

  • put(key,value) 一次添加一对映射关系

  • put(Map map) 一次添加多对映射关系

    this = this ∪  map 
    
	@Test
	public void test() {
		
		//测试添加
		Map  map = new HashMap();
		map.put("小雷", "小白");
		map.put("张三", "李四");
		map.put("曹操",null);
		map.put("王五",new String[] {"网红1","网红2"});	
		System.out.println(map.size());
	}

2.删除方法

  • remove(Object key) 删除指定key值的键值对
  • clear() 清空map
@Test
	public void test1() {
		
		//测试删除
		Map  map = new HashMap();
		map.put("小雷", "小白");
		map.put("张三", "李四");
		map.put("曹操",null);		
		map.put("王五",new String[] {"网红1","网红2"});	
		
		map.remove("王五");
		System.out.println(map.size());
	}

3.修改方法

  • 通过put可以替换value(因为map中的key值是不能重复的,添加重复的key值,就会覆盖之前的元素的value值)
	@Test
	public void test() {
		
		//测试用put进行修改元素的value值
		Map  map = new HashMap();
		map.put("小雷", "小白");
		map.put("张三", "李四");
		map.put("曹操",null);
		map.put("曹操","乔碧Luo ");
		map.put("王五",new String[] {"网红1","网红2"});	
		System.out.println(map.size());
	}

4.查询

  • containkey(Object key)判断map中是否有这个key值
  • containvalue(Object value) 判断map中是否有这个value值
  • V get(Object key)获取该key值所对应的value值
  • boolean isEmpty() 判断这是否是一个空的map
@Test
	public void test() {
		
		//测试添加
		Map  map = new HashMap();
		map.put("小雷", "小白");
		map.put("张三", "李四");
		map.put("曹操",null);
		map.put("王五",new String[] {"网红1","网红2"});	
		boolean i = map.containkey("小雷");
		boolean g = map.containkey("小白");
		boolean n =  map.get("小雷");
		boolean b = map.isEmpty();
		System.out.println(map.size());
		System.out.println(i);
		System.out.println(g);
		System.out.println(n);
		System.out.println(b);
	}

5.获取键值对数

  • Map对象.size()

     前面的代码示例中都有这个方法,不重复展示啦.
    

6.遍历

  • Set KeySet() 获取map的所有key值
  • Collection value() 获取map的所有的value值
  • Set entrySet() 由entry对象构成的set,因为key值不重复,那么entry对象也不重复,结果是以键值对返回的
  • Map.Entry是Map的一个内部接口,它有方法getKey()和方法getValue()
  • 它的对象可以获取map对象的key和value
@Test
	public void test3() {
		//遍历
		//获取map所有的key值
		Map  map = new HashMap();
		map.put("小雷", "小白");
		map.put("张三", "李四");
		map.put("曹操",null);		
		map.put("王五",new String[] {"网红1","网红2"});	
		
		Set KeySet = map.keySet();
        for (Object obeject : KeySet) {
            System.out.println(obeject);
        }
		System.out.println(map.size());
	}
@Test
	public void test3() {
		//遍历
		//获取map所有的value值
		Map  map = new HashMap();
		map.put("小雷", "小白");
		map.put("张三", "李四");
		map.put("曹操",null);		
		map.put("王五",new String[] {"网红1","网红2"});	
		
		Collection c = map.values();
		for(Object object : c){
			System.out.println(c);
		}
		System.out.println(map.size());
	}
@Test
	public void test3() {
		//遍历
		//获取map所有键值对
		Map  map = new HashMap();
		map.put("小雷", "小白");
		map.put("张三", "李四");
		map.put("曹操",null);		
		map.put("王五",new String[] {"网红1","网红2"});	
		
		Set entrySet = map.entrySet();
		for(Object object : entrySet){
			System.out.println(object);
		}
		System.out.println(map.size());
	}

Map常用实现类

HashMap

  • HashMap是 Map 接口使用频率最高的实现类。
  • 允许使用null键和null值,与HashSet一样,不保证映射的顺序。
  • HashMap 判断两个 key 相等的标准是:两个 key 通过 equals() 方法返回 true,hashCode 值也相等。
  • HashMap 判断两个 value相等的标准是:两个 value 通过 equals() 方法返回 true。

TreeMap

  • TreeMap存储 Key-Value 对时,需要根据 key进行排序。TreeMap 可以保证所有的 Key-Value 对处于有序状态。
  • TreeMap 的 Key 的排序:
  • 自然排序:TreeMap 的所有的 Key 必须实现 Comparable 接口,而且所有的 Key 应该是同一个类的对象,否则将会抛出 ClasssCastException
  • 定制排序:创建 TreeMap 时,传入一个 Comparator 对象,该对象负责对 TreeMap 中的所有 key 进行排序。此时不需要 Map 的 Key 实现 Comparable 接口
  • TreeMap判断两个key相等的标准:两个key通过compareTo()方法或者compare()方法返回0。
  • 若使用自定义类作为TreeMap的key,所属类需要重写equals()和hashCode()方法,且equals()方法返回true时,compareTo()方法应返回0。

LinkedHashMap(JDK1.7-JDK1.8)

  • LinkedHashMap 是 HashMap 的子类
  • 与LinkedHashSet类似,LinkedHashMap 可以维护 Map 的迭代顺序:迭代顺序与 Key-Value 对的插入顺序一致
发布了82 篇原创文章 · 获赞 26 · 访问量 3984

猜你喜欢

转载自blog.csdn.net/qq_40742223/article/details/105118834