1.Map简介

Map是一种用于存储键值对(key-value pairs)的接口。它代表了一种映射关系,其中每个键(key)都是唯一的,而值(value)可以重复。
不同的Map实现类可以提供不同的顺序保证。例如,HashMap不保证键值对的顺序,而TreeMap根据键的顺序(或自定义排序)保持有序。

2.Map常用方法

V put(K key,V value) //添加元素
V remove(Object key) //根据键删除键值对元素
void clear() //移除所有的键值对元素
boolean containsKey(Object key) //判断集合是否包合指定的键
boolean containsValue(Object value) //判断集合是否包含指定的值
boolean isEmpty() //判断集合是否为空
int size() //集合的长度,也就是集合中键值对的个数

3.Map集合的遍历

第一种方法:
1.使用 keySet() 方法获取所有键的集合。
2.使用增强for循环遍历键集合,通过 get() 获取键对应的值,并进行操作

//方法1代码实例
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        map.put("1号丈夫", "1号妻子");
        map.put("2号丈夫", "2号妻子");
        map.put("3号丈夫", "3号妻子");
        map.put("4号丈夫", "4号妻子");
        map.put("5号丈夫", "5号妻子");
        //获取到所有的键
        Set<String> key = map.keySet();
        for (String s : key) {
            String value = map.get(s);
            System.out.println(s + "-----" + value);
        }
    }

第二种方法
1.通过 entrySet() 方法获得所有键值对
2.通过getKey()方法和getValue()方法得到每一个键值对中的键和值

//方法2代码实例
        Map<String, String> map = new HashMap<>();
        map.put("1号丈夫", "1号妻子");
        map.put("2号丈夫", "2号妻子");
        map.put("3号丈夫", "3号妻子");
        map.put("4号丈夫", "4号妻子");
        map.put("5号丈夫", "5号妻子");
        Set<Map.Entry<String, String>> entries = map.entrySet();
        for (Map.Entry<String, String> entry : entries) {
            String key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key + "------" + value);
        }
    }

第3种方法
使用forEach()方法 ,forEach()方法的参数是 BiConsumer<>() 接口, 所以需要重写BiConsumer里的accept方法. forEach()方法底层已经把Map遍历了一遍,accept方法是用来决定要拿key和value来干什么,所以参数是key和value

//匿名内部类
        hashMap.forEach(new BiConsumer<Student, String>() {
            @Override
            public void accept(Student student, String s) {
                System.out.println(student + "-----------" + s);
            }
        });
//lambda表达式
hashMap.forEach((Student student, String s) -> {System.out.println(student + "-----------" + s);});

4.HashMap

HashMap小结
1.HashMap底层是哈希表结构的
2.依赖hashCode方法和equals方法保证键的唯一
3.如果键要存储的是自定义对象,需要重写hashCode和equals方法

5.TreeMap

TreeMap底层是红黑树结构的
依赖自然排序或者比较器排序,对键进行排序
如果键存储的是自定义对象,需要实现Comparable接口或者在创建TreeMap对象时给出比较器排序规则

6.可变参数

    private static int getSum(int... arrays) {
        int sum = 0;
        for (int i = 0; i < arrays.length; i++) {
            sum += arrays[i];
        }
        return sum;
    }

可变参数就是形参的个数是可以变化的
这里的变量其实是一个数组
如果一个方法有多个参数并包含可变参数,可变参数要放在最后, 否则它会跟个胖子一样把不可变参数的实参也吃掉

7.创建不可变集合

        //不可变的List
        List<String> immutableList = List.of("Apple", "Banana", "Cherry");
        //这样用不可变的集合创建出来的list是可变的
        ArrayList<String> list = new ArrayList<>(immutableList);

        //不可变的set
        Set<String> set = Set.of("Apple", "Banana", "Cherry");

        //不可变的Map
        Map<String, Integer> map = Map.of("One", 1, "Two", 2, "Three", 3);
        Map<String, Integer> map1 = Map.ofEntries(Map.entry("one", 1), Map.entry("two",2), Map.entry("three", 3));