一、 Map
HashSet 和 HashMap 之间的关系
HashSet 底层实现 实际上就是一个HashMap
HashSet 是依赖 HashMap 的
在向HashSet 中添加的值 相当于往Map 中添加到Key 的位置
HashSet 和 TreeSet
去重 排序 相当于 是对map 的键去操作
HashSet 去重复: 重写HashCode() 和 equals () 方法
HashSet 去重复: 重写HashCode() 和 equals () 方法
// 添加
public static void fun1(){
// key键 人名
// value 年龄
Map<String , Integer> map = new HashMap<>();
// 保存键值对
// 添加键值对方法的返回值 返回的是被覆盖的值的部分
Integer num1 = map.put("张三", 18);
Integer num2 = map.put("李四", 22);
Integer num3 = map.put("王五", 31);
Integer num4 = map.put("赵六", 11);
// 测试 添加方法的返回值
Integer num5 = map.put("张三", 250);
System.out.println(num5);
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
System.out.println(num4);
// 打印 map 只有四对键值对
System.out.println(map);
}
public static void fun2() {
/*
* 测试
* clear()
* containsKey(Object key)
* containsValue(Object value)
* isEmpty()
* remove(Object key)
* size()
*/
Map<String, Integer> map = new HashMap<>();
// 添加 put
Integer num1 = map.put("张三", 18);
Integer num2 = map.put("李四", 22);
Integer num3 = map.put("王五", 31);
Integer num4 = map.put("赵六", 11);
// 删除的返回值,是删除的这个键对应的 值
Integer remove = map.remove("李四");
// 是否包含这个key
System.out.println(map.containsKey("张三"));
// 是否包含这个value
System.out.println(map.containsValue(18));
// 这个map 集合 是不是 空
System.out.println(map.isEmpty());
// 删除一个元素 (因为键是唯一的,所以根据键来删除)
System.out.println(map.remove("李四"));
// map 集合 的键值对 对数
System.out.println(map.size());
map.clear();
System.out.println(map);
}
public static void fun3() {
// 创建map 集合 key 保存 学生 value 保存 学生的户籍
Map<Student, String> map = new HashMap<>();
map.put(new Student("王龙",18), "北京");
map.put(new Student("徐涵涵",23), "无锡");
map.put(new Student("高松松",20), "徐州");
map.put(new Student("王龙",18), "上海");
// 为什么打印出来的是保留 上海的王龙
// 键不会重复保存 但是 值会覆盖上一个值
System.out.println(map);
}
遍历Map 集合
// 遍历Map
HashMap<String, Integer> map = new HashMap<>();
map.put("高松松", 18);
map.put("刘国强", 19);
map.put("谢伟峰", 14);
map.put("李彦奇", 15);
// 将map 集合 转换成集合
Set<String> keySet = map.keySet();
// 获取keySet的迭代器
Iterator<String> iterator = keySet.iterator();
while (iterator.hasNext()) {
// 获取下一个元素
String next = iterator.next();
// 通过key 值 获取 value
Integer integer = map.get(next);
System.out.println(next + " = " + integer);
}
}
public static void fun2() {
// 使用增强 for 循环遍历
// 遍历Map
HashMap<String, Integer> map = new HashMap<>();
map.put("高松松", 18);
map.put("刘国强", 19);
map.put("谢伟峰", 14);
map.put("李彦奇", 15);
Set<String> keySet = map.keySet();
for (String key : keySet) {
// 通过key 获取 value 值
Integer integer = map.get(key);
System.out.println(key + " = " + integer);
}
}
public static void fun3() {
// entrySet();
// 该方法返回是一个集合 集合中 存储的时一个一个键值对对象
// Entry 对象 中 保存了 key 和 value
// 利用该方法遍历
HashMap<String, Integer> map = new HashMap<>();
map.put("高松松", 18);
map.put("刘国强", 19);
map.put("谢伟峰", 14);
map.put("李彦奇", 15);
// 将map 集合 转换为 set 集合
Set<Entry<String, Integer>> entrySet = map.entrySet();
// 获取 转换后集合的 迭代器
Iterator<Entry<String, Integer>> iterator = entrySet.iterator();
// 判断是否还有下一个元素
while (iterator.hasNext()) {
// 下一个元素(对象)
Entry<String, Integer> next = iterator.next();
// 将对象中的value 值 取出来
Integer value = next.getValue();
// 将对象中的 key 值 取出
String key = next.getKey();
// 通过获取到的key 值 获取 Value
// Integer integer = map.get(next);
// 打印
}
}
public static void fun4() {
// 利用entrySet() 方法 增强for 循环遍历
HashMap<String, Integer> map = new HashMap<>();
map.put("高松松", 18);
map.put("刘国强", 19);
map.put("谢伟峰", 14);
map.put("李彦奇", 15);
// 将map 集合 转换成一个entry 集合
Set<Entry<String, Integer>> entrySet = map.entrySet();
for (Entry<String, Integer> entry : entrySet) {
// 通过遍历出来的元素 getValue 获取value 值
Integer value = entry.getValue();
// getKey 获取key 值
String key = entry.getKey();
System.out.println(key + value);
}
}
map 的嵌套
public static void main(String[] args) {
/*
* Java学科
* java 1班级 --- 保存学生 和 户籍
* java 2班级 --- 保存学生 和 户籍
*
* 1班 也是个 map
* 保存 --- 学生 户籍
* Java学科 是一个map
* 保存了两个键值对 1班 和 2班
*/
// 创建一个学科集合
HashMap, Integer> map = new HashMap<>();
// 创建一个 一班集合
HashMap c1 = new HashMap<>();
c1.put(new Person("高松松",18),"徐州" );
c1.put(new Person("董苏岩",18),"丰县" );
// 创建一个 二班集合 添加两个人
HashMap c2 = new HashMap<>();
c2.put(new Person("菲菲",15), "盐城");
c2.put(new Person("嘿嘿",16),"如皋");
map.put(c1, 1);
map.put(c2, 2);
// 将map 集合转换为set 集合
Set> keySet = map.keySet();
// 获取 KeySet 的迭代器
Iterator> m1 = keySet.iterator();
// 判断 循环
while (m1.hasNext()) {
// 获取的是 大集合中的两个小map 集合
HashMap class1 = m1.next();
// 将子map 集合 转换为set 集合
Set cset = class1.keySet();
// 获取 cset 的迭代器
Iterator csetItera = cset.iterator();
// 循环 判断
while (csetItera.hasNext()) {
// 获取 子集合中 key值
Person p = csetItera.next();
// 通过key 值 获取value
String string = class1.get(p);
// 打印 结果
System.out.println( p + " == " + string);
}
}
}