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());
// 查询是否包含指定的key
System.out.println(map.containsKey("006"));
// 判断是否为空
System.out.println(map.isEmpty());
// 获取所有的key
Set<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", "东方不败");
// 获取所有的key
Set<String> keySet = map.keySet();
// 遍历keySet,通过key获取value
for(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和value
System.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基础的重点知识点全集》