1、HashMap:
1)、 引入
如果业务需要我们去用姓名的拼音手写字母匹配完整姓名,那么如果用单列数据,我们可能需要两个集合才能存储,而且两个集合之间没有关联不好操作,这种时候双列数据就会起很大作用
2)、 单列数据与双列数据
3)、map概述
Map :映射。跟 Collections 体系的集合,是不一样的。是以key-value的形式保存数据的,常常称之为键值对。
4)、 HashMap概念及特点
概述:HashMap实现了Map接口,是Map子类中使用最最最多的。
数据结构:key部分使用的数据结构为:数组+双向链表+红黑树 。HashSet使用的就是key部分进行存储的。
存储数据特点
-
键值对映射关系
-
一个键对应一个值
-
键不能重复,值可以重复
-
键允许为空值
-
元素存取无序
5)、 方法的使用
方法名 | 说明 |
---|---|
V put(K key,V value) | 添加元素 |
V remove(Object key) | 根据键删除键值对元素 |
void clear() | 移除所有的键值对元素 |
boolean containsKey(Object key) | 判断集合是否包含指定的键 |
boolean containsValue(Object value) | 判断集合是否包含指定的值 |
boolean isEmpty() | 判断集合是否为空 |
int size() | 集合的长度,也就是集合中键值对的个数 |
V get(Object key) | 根据键获取值 |
Set<K> keySet() | 获取所有键的集合 |
Collection<V> values() | 获取所有值的集合 |
Set<Map.Entry<K,V>> entrySet() | 获取所有键值对对象的集合 |
6)、增加
import java.util.HashMap;
import java.util.Map;public class AddDemo {public static void main(String[] args) {// 定义一个map对象,key存放字符串类型,value存放Integer类型Map<String, Integer> map = new HashMap<>();map.put("a", 5);map.put("c", 2);map.put("e", 6);map.put(null, 0);map.put(null, 2);System.out.println(map);// 定义一个map,key存放字符串类型,value存放字符串类型Map<String, String> map1 = new HashMap<>();map1.put("java", "企业级系统开发");map1.put("Python", "人工智能");map1.put("go", "字节跳动");map1.put(null, null);// key不存在就添加(key存在,如果value值为null,也会添加)map1.putIfAbsent(null, "哈哈");System.out.println(map1);}
}
7)、删除
import java.util.HashMap;
import java.util.Map;public class RemoveDemo {public static void main(String[] args) {// 定义一个map,key存放字符串类型,value存放字符串类型Map<String, String> map = new HashMap<>();map.put("001", "唐海峰");map.put("002", "张三丰");map.put("003", "张无忌");map.put("004", "东方不败");// 根据键值删除,返回被删除的元素String content = map.remove("001");System.out.println(content);System.out.println(map);// 根据键值对删除,返回一个Boolean类型的结果boolean flag = map.remove("004", "东方不败");System.out.println(flag);System.out.println(map);// 清空集合map.clear();System.out.println(map);}
}
8)、修改
import java.util.HashMap;
import java.util.Map;public class UpdateDemo {public static void main(String[] args) {// 定义一个map,key存放字符串类型,value存放字符串类型Map<String, String> map = new HashMap<>();map.put("001", "唐海峰");map.put("002", "张三丰");map.put("003", "张无忌");map.put("004", "东方不败");System.out.println(map);// 修改(存在就修改,不存在就添加)String content = map.put("001", "唐延");System.out.println(content);System.out.println(map);// 根据key查找,替换指定key值的内容String con = map.replace("006", "唐海峰");System.out.println(con);System.out.println(map);// 根据key,value查找,替换指定的值map.replace("001", "唐延", "tarnett");System.out.println(map);}
}
9)、查询
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class SelectDemo {public static void main(String[] args) {// 定义一个map,key存放字符串类型,value存放字符串类型Map<String, String> map = new HashMap<>();map.put("001", "唐海峰");map.put("002", "张三丰");map.put("003", "张无忌");map.put("004", "东方不败");System.out.println(map);// 获取指定key对应的值String content = map.get("001");System.out.println(content);// 获取集合的长度,获取key的长度System.out.println(map.size());// 查询是否包含指定的keySystem.out.println(map.containsKey("006"));// 判断是否为空System.out.println(map.isEmpty());// 获取所有的keySet<String> keySet = map.keySet();System.out.println(keySet);// 获取所有的值Collection<String> values = map.values();System.out.println(values);}
}
2、两种遍历:
1)、通过key获取值
import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class KetSetDemo {public static void main(String[] args) {Map<String, String> map = new HashMap<>();map.put("001", "唐海峰");map.put("002", "张三丰");map.put("003", "张无忌");map.put("004", "东方不败");// 获取所有的keySet<String> keySet = map.keySet();// 遍历keySet,通过key获取valuefor(String key : keySet){String value = map.get(key);System.out.println(value);}}
}
2)、获取所有的键值对
import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class EntryDemo {public static void main(String[] args) {Map<String, String> map = new HashMap<>();map.put("001", "唐海峰");map.put("002", "张三丰");map.put("003", "张无忌");map.put("004", "东方不败");// 获取所有的键值对Set<Map.Entry<String, String>> entrySet = map.entrySet();// 遍历键值对for(Map.Entry<String, String> entry : entrySet){// 通过键值对对象获取key和valueSystem.out.println("key = " + entry.getKey() + " : " + entry.getValue());}}
}
3)、HashMap保存各种数据类型:
1>、键是String,值为自定义类型
import java.util.HashMap;
import java.util.Set;/*** 键是String,值为自定义类型*/
public class Test01 {public static void main(String[] args) {HashMap<String, Student> map = new HashMap<>();map.put("001", new Student("zhangsan", 21));map.put("002", new Student("lisi", 22));map.put("003", new Student("wangwu", 23));System.out.println(map);// 遍历Set<String> keySet = map.keySet();for(String key : keySet) {System.out.println(map.get(key));}}
}
2>、键是String,值为ArrayList
import java.util.*;/*** 键是String,值为ArrayList*/
public class Test02 {public static void main(String[] args) {Map<String, List<String>> map = new HashMap<>();List list1 = new ArrayList();list1.add("孙悟空");list1.add("猪八戒");map.put("西游记", list1);List list2 = new ArrayList();list2.add("赵云");list2.add("马超");map.put("三国演义", list2);// 遍历Set<String> keySet = map.keySet();for(String key : keySet) {List<String> list = map.get(key);for (String value : list) {System.out.println(value);}}}
}
3>、ArrayList嵌套HashMap
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class Test03 {public static void main(String[] args) {List<HashMap<String, String>> list = new ArrayList<>();HashMap<String, String> map1 = new HashMap<>();map1.put("杨过", "小龙女");map1.put("郭靖", "黄蓉");list.add(map1);HashMap<String, String> map2 = new HashMap<>();map2.put("java", "系统开发");map2.put("go", "字节跳动");list.add(map2);System.out.println(list);}
}
本电子书目录:《Java基础的重点知识点全集》