Map集合(字典,映射:key-value)——HashMap

Map:用于保存具有映射关系的数据,因此Map集合里有两组值:key和value(key不允许重复,同一个Map里任何两个key通过equals方法比较都返回false)(key和value都可以是任何类型的引用数据

Map接口下有:
HashMap、LinkedHashMap、SortedMap(接口)、TreeMap、EnumMap等子接口和实现类

Map与List的相同点:元素之间可重复,可以根据索引来查找;
Map与List的不同点:Map索引key不再使用整数值,而是以另一个对象作为索引。——有时,Map称为**“字典”**或关联数组。

一、HashMap实现类

keySet: 把Map集合中所有的key放在一起,它们就组成了一个Set集合(没有顺序,不可重复,可翻译成罐子)——>keySet()方法,输出所有key

Map的遍历通过遍历key来实现遍历所有的key-value对

【Map的常用方法】:默认map为引用变量
1.根据key删除对应的value
——map.remove(“key1”);
2.清空
——map.clear();
3.获取长度
——map.size();
4.获取一个元素
——map.get(“key2”):可通过key2获取value2
5.取出所有的key
——map.keySet();
6.取出所有的value
——map.values()
5.获取所有元素——遍历

(方法一)迭代器
Set allKeys = map.keySet();
Iterator it = allKeys.iterator();
while(it.hasNext())
{
String key = it.next();
String val = map.get(key);
println(key+"="+val);
}
(方法二)foreach——只要能使用迭代器,就能使用foreach——推荐
for(var key:map.keySet())
{
println(key+map.get(key))
}

————以上可简化为:
map.forEach((key,value) -> System.out.println(key + “–>” + value));

(方法三)entry对象

【实例一】

import java.util.*;
public class  MapTest
{
	public static void main(String[] args) 
	{
		Map map = new HashMap();//HashMap实现类
		      //key-value
		map.put("你好",10);
		map.put("我好",30);
		map.put("他好",58);
		map.put("大家好",58);//value可重复
		//输出Map集合包含的key-value对
		System.out.println(map);

		//用新的value覆盖原有的value,则put()方法会返回被覆盖的value
		System.out.println(map.put("你好",90));//输出10

		//判断是否包含指定的key或value
		System.out.println("是否包含值为:他好 的key?"+ map.containsKey("他好"));
		System.out.println("是否包含值为:58 的value?"+ map.containsValue(58));
		
		//通过foreach循环遍历出所有key。只能通过遍历key来实现遍历key-value对
		//而一般的对象可以直接遍历对象本身,如:for(var a: apple)
		for(var key:map.keySet())//keySet方法:返回Map中所有key组成的set集合
		{
			System.out.println(key +"——>"+map.get(key));
			//get(key)用于返回指定key所对应的value
		}

		//根据key来删除key-value对
		map.remove("大家好");
		System.out.println(map);
	}
}

在这里插入图片描述
【实例二】
使用泛型定义Map

import java.util.*;
public class  MapDemo1
{
	public static void main(String[] args) 
	{
		Map<String,Object> map = new HashMap<>();
		//泛型,菱形语法,限制Map里的key必须为String类型,value必须为Object类型
		map.put("key1","value1");
		map.put("key2","value2");
		map.put("key3","value3");
		map.put("key4","value4");
		map.put("key5","value5");
		System.out.println(map);
		System.out.println(map.keySet());
		System.out.println(map.values());

		//直接定义变量遵循如下形式:
		Set<String> set = map.keySet();
		System.out.println(set);

		Collection<Object> values = map.values();
		System.out.println(values);
		
		//删除功能
		//1、根据key来删除value
		map.remove("key1");
		System.out.println(map);

		//获取元素
		System.out.println(map.get("key2"));

		//foreach遍历
		for(var key:map.keySet())//keySet方法:返回Map中所有key组成的set集合
		{
			System.out.println(key +"——>"+map.get(key));
			//get(key)用于返回指定key所对应的value
		}

		//通过迭代器遍历
		//取出所有key
		Set<String> allKeys = map.keySet();
		Iterator<String> it = allKeys.iterator();
        while(it.hasNext())
        {
            String key = it.next();
            Object val = map.get(key);
            System.out.println(key+"="+val);
        }
	}
}

在这里插入图片描述

二、LinkedHashMap实现类

是HashMap的一个子类,使用双向链表来维护key-value对的顺序。
功能:LinkedHashMap可以记住key-value的添加顺序,遍历时会按照顺序输出
而HashMap无法记住顺序,是把key放在一个Set集合中。

import java.util.*;
public class LinkedHashMapTest
{
	public static void main(String[] args) 
	{
		var scores = new LinkedHashMap();
		var s = new HashMap();
		scores.put("语文",80);
		scores.put("数学",90);
		scores.put("英语",60);

		s.put("语文",80);
		s.put("数学",90);
		s.put("英语",60);

		//遍历方法一:通过forEach()方法遍历scores里的所有key-value对
		System.out.println("LinkedHashMap:");
		scores.forEach((key,value) -> System.out.println(key + "-->" + value));
		System.out.println("HashMap:");
		s.forEach((key,value) -> System.out.println(key + "-->" + value));

		//遍历方法二:通过foreach
		System.out.println("第二种遍历方法:");
		System.out.println("LinkedHashMap:");
		for(var key:scores.keySet())//keySet方法:返回Map中所有key组成的set集合
		{
			System.out.println(key +"——>"+scores.get(key));
			//get(key)用于返回指定key所对应的value
		}
		System.out.println("HashMap:");
		for(var key:s.keySet())//keySet方法:返回Map中所有key组成的set集合
		{
			System.out.println(key +"——>"+s.get(key));
			//get(key)用于返回指定key所对应的value
		}
	}
}

在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值