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));