Java Map 介绍以及子类介绍

怀旧网个人博客网站地址:怀旧网,博客详情:Java Map 介绍以及子类介绍

Java Map 介绍以及子类介绍

Map 常见的API

Map是双列集合的顶层接口,它的功能是全部双列集合都可以继承使用的。

image-20240318110830074

方法使用测试

创建实例化对象

因为Map是接口对象,所以这边创建它的实现类HashMap

Map<String, Integer> map = new HashMap<>();

put 方法

Map<String, Integer> map = new HashMap<>();

map.put("a", 1);
map.put("b", 2);
map.put("c", 3);

System.out.println(map);

image-20240318111420952

image-20240318111455261

这边的put添加方法有返回值,可以接受看看输出什么

Integer value1 = map.put("a", 1);
System.out.println(value1);

image-20240318111545521

输出为空

在测试一个

Map<String, Integer> map = new HashMap<>();

Integer value1 = map.put("a", 1);
System.out.println(value1);
map.put("b", 2);
map.put("c", 3);

Integer value2 = map.put("a", 4);
System.out.println(value2);

System.out.println(map);

image-20240318112011717

根据输出结果讨论得出以下结论;

  1. 通过第一行输出为null说明当执行put方法的时候当前的key没有在数据组里面的时候(没有冲突)就会默认返回null
  2. 通过第二行的输出,可以看出,这边是执行覆盖操作的时候的返回值,输出为1,代表了原始数据的值被覆盖了,并且将原始的数据做了返回。
  3. 第三行输出,当前的a值已经被后面的代码修改为4了,说明map和set集合是有区别的,set集合当发现相同数据时,是直接不执行操作,然后map系列是会将原始的值进行覆盖。

remove 方法

remove方法是通过传入的key来删除这一对数据,并且将删除成功的key存在的value返回-测试:

Map<String, Integer> map = new HashMap<>();

map.put("a", 1);
map.put("b", 2);
map.put("c", 3);

Integer res = map.remove("a");
System.out.println(res);

System.out.println(map);

image-20240318112553608

Integer res = map.remove("d");
System.out.println(res);

image-20240318112616684

当删除不存在的数据时,会返回null,代表删除失败!


clear 方法

clear 见名知意就是清空当前map中的所有数据

Map<String, Integer> map = new HashMap<>();

map.put("a", 1);
map.put("b", 2);
map.put("c", 3);

map.clear();

System.out.println(map);

image-20240318112756777


containsKey 和 containsValue 方法

containsKey 是用来判断当前的key是否存在 ----containsValue 是用来判断当前的value是否存在返回值为boolean

Map<String, Integer> map = new HashMap<>();

map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
map.put("d", 3);

boolean keyRes1 = map.containsKey("a");
System.out.println(keyRes1);
boolean keyRes2 = map.containsKey("e");
System.out.println(keyRes2);

boolean valueRes1 = map.containsValue(1);
System.out.println(valueRes1);
boolean valueRes2 = map.containsValue(0);
System.out.println(valueRes2);

image-20240318113120702


isEmpty 方法

用来判断当前map是否为空-返回值为boolean类型(为空返回true,不为空返回false)

Map<String, Integer> map = new HashMap<>();

boolean empty1 = map.isEmpty();

map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
map.put("d", 3);

boolean empty2 = map.isEmpty();

System.out.println(empty1);
System.out.println(empty2);

image-20240318113334370


size 方法

得到当前map中有多少条记录

Map<String, Integer> map = new HashMap<>();

map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
map.put("d", 3);

int size = map.size();
System.out.println(size);

image-20240318113439806

Map 的遍历方式

一共有如下三中标遍历方式

  • 键找值
  • 键值对
  • Lambda表达式

键找值 方式遍历

原理就是:先获取所有的key的Set集合,然后在通过每一个key去找到对应的值即可

  1. 获取当前所有的key(类型为Set)
Set<String> keySet = map.keySet();
  1. 当获取到所有的Set后,就直接可以使用对应的Set的遍历方式获取到每一个key
Map<String, Integer> map = new HashMap<>();

map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
map.put("d", 3);

Set<String> keySet = map.keySet();

for (String key : keySet) {
    System.out.println(key);
}

image-20240318114127321

  1. 最后通过键获取值,并打印(通过key获取value可以使用, get(key) 方法来获取)
Map<String, Integer> map = new HashMap<>();

map.put("a", 1);
map.put("d", 3);
map.put("c", 3);
map.put("b", 2);

Set<String> keySet = map.keySet();

for (String key : keySet) {
    System.out.println(key + "-->" + map.get(key));
}

image-20240318114310820

成功获取到所有数据-同时可以从输出内容看出,map的存取也是无序的


键值对 方式遍历

首先获取到map中的所有键值对数据-(可以通过entrySet() 方法)

当获取到数据后,直接使用增强for就可以直接进行遍历

Map<String, Integer> map = new HashMap<>();

map.put("a", 1);
map.put("d", 3);
map.put("c", 3);
map.put("b", 2);

Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
for (Map.Entry<String, Integer> entry : entrySet) {
    System.out.println(entry);
}

image-20240318144120412

绘制也可以通过下面的方法,将键和值分别取出来遍历

Map<String, Integer> map = new HashMap<>();

map.put("a", 1);
map.put("d", 3);
map.put("c", 3);
map.put("b", 2);

Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
for (Map.Entry<String, Integer> entry : entrySet) {
    String key = entry.getKey();
    Integer value = entry.getValue();
    System.out.println(key + "-->" + value);
}

image-20240318144224838


Lambda 方式遍历

这边的底层则是采用获取键值对数据的方式,然后在采用增强fro循环遍历

Map<String, Integer> map = new HashMap<>();

map.put("a", 1);
map.put("d", 3);
map.put("c", 3);
map.put("b", 2);

map.forEach(new BiConsumer<String, Integer>() {
    @Override
    public void accept(String key, Integer value) {
        System.out.println(key + "-->" + value);
    }
});

image-20240318144636050

简化写法

Map<String, Integer> map = new HashMap<>();

map.put("a", 1);
map.put("d", 3);
map.put("c", 3);
map.put("b", 2);

map.forEach((key, value) -> System.out.println(key + "-->" + value));

image-20240318145019571

HashMap 介绍

特点

image-20240318151308651

总结

image-20240318151348537

LinkedHashMap 介绍

特点

image-20240318152708184

可以参考前面的LinkedHashSet:网页链接 在最底下的位置

代码测试

Map<String, Integer> linkedHashMap = new LinkedHashMap<>();

linkedHashMap.put("a", 1);
linkedHashMap.put("d", 3);
linkedHashMap.put("c", 3);
linkedHashMap.put("b", 2);

System.out.println(linkedHashMap);

image-20240318153139686

输出结果顺序和添加顺序一致

TreeMap 介绍

特点

image-20240318153311452

代码编写时-自定义类的两种排序规则

image-20240318153347613

代码演示

  • 代码演示可以参考前面的TreeSet代码: 网页链接

总结

image-20240318153738477

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值