JAVA双列集合Map的特点

一次存一对元素,分别是 键 和 值,他们是一 一对应的:
image.png
其中:
键不可以重复,值可以重复
这一对数据叫键值对、键值对对象、或 Entry


Map 的体系结构:

image.png
Snipaste_2024-01-29_10-13-11.png


Map的常见API:

image.png

方式的实现:
注意 Map 接口的泛型有两个参数,一个是键,一个是值Snipaste_2024-01-29_08-26-36.png

//创建对象
Map<String,String>map=new HashMap<>();


//put:1.添加元素
map.put("喜羊羊","灰太狼");
map.put("熊大","熊二");

/* //put:2.覆盖元素
        String result = map.put("喜羊羊", "美羊羊");
        System.out.println(result);//灰太狼    (返回被覆盖的值)*/

/*//remove根据键删除键值对 对象
        map.remove("喜羊羊");*/

/* //clear
        map.clear();*/

/* //containKey
        System.out.println(map.containsKey("喜羊羊"));

        //containsValue
        System.out.println(map.containsValue("熊二"));*/

/*   //is Empty
        System.out.println(map.isEmpty());*/

//size键值对个数
System.out.println(map.size());

//get
System.out.println(map.get("喜羊羊"));
//打集合
System.out.println(map);

要注意的就是 put 方法有两个作用:

  • 当添加的键不存在时,会直接添加该键值对,方法返回 null
  • 当添加的键存在时,会覆盖原有的键值对,并把被覆盖的值返回

Map 的遍历方式:

键找值(KeySet 方法+之前的遍历方法)

image.png

演示:

//创建集合
Map<String,String> map =new HashMap<>();
//添加键值对
map.put("喜羊羊","灰太狼");
map.put("熊大","熊二");
map.put("刘备","孙尚香");
//将键添加进set集合
Set<String> keys = map.keySet();
//遍历键---增强for
for(String key:keys){
    System.out.println(key+" "+map.get(key))
}
//或者迭代器:
Iterator<String> it = keys.iterator();
while(it.hasNext()){
    String str=it.next();//因为next要多次使用,最好交给一个变量
    System.out.println(str+" "+map.get(str));
}
//或者lambda
keys.forEach(s-> System.out.println(s+" "+map.get(s)));

熊大 熊二
刘备 孙尚香
喜羊羊 灰太狼


键值对(entrySet+之前的遍历方法)

Snipaste_2024-01-29_09-49-44.png
要知道 Entry 接口内,直接有 getKey 和 getValue 方法,遍历很方便

//创建集合
Map<String, String> m = new HashMap<>();
//添加键值对
m.put("喜羊羊", "灰太狼");
m.put("熊大", "熊二");
m.put("刘备", "孙尚香");
//将键值对放入Set集合,这个集合实现了Map.Entry接口
Set<Map.Entry<String, String>> entries = m.entrySet();

//增强for
for (Map.Entry<String, String> entry : entries) {
    System.out.println(entry.getKey() + " " + entry.getValue());

}

//迭代器
Iterator<Map.Entry<String, String>> it = entries.iterator();
while (it.hasNext()) {
    Map.Entry<String, String> e = it.next();
    System.out.println(e.getKey() + " " + e.getValue());
}

//lambda表达式
entries.forEach( e-> System.out.println(e.getKey() + " " + e.getValue()));

熊大 熊二
刘备 孙尚香
喜羊羊 灰太狼


Lambda 表达式:

在 forEach 的基础上使用 Lambda 表达式
Snipaste_2024-01-29_09-54-47.png

//创建集合
Map<String, String> m = new HashMap<>();
//添加键值对
m.put("喜羊羊", "灰太狼");
m.put("熊大", "熊二");
m.put("刘备", "孙尚香");


//普通forEach
m.forEach(new BiConsumer<String, String>() {
    @Override
    public void accept(String Key, String Value) {
        System.out.println(Key + " " + Value);
    }
});

//使用lambda表达式改进
m.forEach((String Key, String Value) -> System.out.println(Key + " " + Value));

熊大 熊二
刘备 孙尚香
喜羊羊 灰太狼

forEach 底层:

//for Each其实就是利用第二种方式进行遍历,依次得到每一个键和值
//再调用accept方法
Snipaste_2024-01-29_10-09-57.pngSnipaste_2024-01-29_10-10-13.png


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

成果、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值