Java HashMap 探索
1.我们在使用map集合时一般都是使用map的HashMap实现类,如下:
HashMap<K,V> map = new HashMap<>();
1.由上可以看出 map 的键key和值value可以是任意类型;
2.键key和值value的类型可以相同,也可以不相同;
3.但对于键key我们希望的是便于查找到值,所以键key的类型常使用String和Integer;
4.值value 可以是基本数据类型,也可以是对象、数组、集合;
5.map 的键key只能是唯一的,不能相同;值value可以相同,也可以不同;
6.如果键相同的话会把之前存放的值覆盖 ;(多用于更新数据)
2.map 存值
在map中存放值使用map的put方法
//map中存放String
HashMap<String, String> map1 = new HashMap<>();
map1.put("aa","aaa");
map1.put("bb","bbb");
map1.put("cc","ccc");
HashMap<Integer, String> map2 = new HashMap<>();
map2.put(1,"aaa");
map2.put(2,"bbb");
map2.put(3,"ccc");
//map中存放对象
HashMap<String, Dog> map3 = new HashMap<>();
map3.put("dog",new Dog());
//map中存放List
HashMap<String, List<Users>> map4 = new HashMap<>();
List<Users> usersList = usersMapper.selectList(null);
map4.put("p1",usersList);
3.遍历map集合
- 通过keySet() 方法遍历
HashMap<String, String> map1 = new HashMap<>();
map1.put("aa","aaa");
map1.put("bb","bbb");
map1.put("cc","ccc");
//获得map所有的键
Set<String> keys = map1.keySet();
//遍历键 (增强for循环方法遍历)
for (String key : keys) {
//通过每一个键,获取对应的值
System.out.println("key:" + key + " value:" + map1.get(key));
}
//遍历键 (迭代器方法遍历)
Iterator<String> iterator = keys.iterator();
//如果获取到了下一个值
while (iterator.hasNext()){
String key = iterator.next();
String value = map1.get(key);
System.out.println("key:" + key + " value:" + value);
}
- 通过enttySet()方法遍历
HashMap<String, String> map1 = new HashMap<>();
map1.put("aa","aaa");
map1.put("bb","bbb");
map1.put("cc","ccc");
Set<Map.Entry<String, String>> entries = map1.entrySet();
for (Map.Entry<String, String> entity : entries) {
String key = entity.getKey();
String value = entity.getValue();
System.out.println("key:" + key + " value:" + value);
}
4.map中常用的操作
//1.根据键获取值
String value = map1.get(key);
//2.查询map集合中是否存在某一个键(“aa”) 存在则返回true 反之false;
boolean aa = map1.containsKey("aa");
//3.查询map集合中是否存在某一个值(“bbb”) 存在则返回true 反之false;
boolean bbb = map1.containsValue("bbb");
//4.清空map集合 (清空map集合中所有的键值)
map1.clear();
//5.判断map集合是否为空
boolean empty = map1.isEmpty();
//6.复制map集合
HashMap<String, String> map2 = new HashMap<>();
map2.putAll(map1);
//7.删除键值对
//7.1. 1个参数,根据键删除:
//参数为键(key),如果存在此键值对,删除成功返回此键对应的值;如果不存在,返回null
String aa = map1.remove("aa");
//7.2. 2个参数,根据键值对删除:
//参数为键(key)和值(value),如果存在此键值对,删除成功返回true;如果不存在,返回 false
boolean remove = map1.remove("cc", "ccc");
//8.map集合的键-值映射关系数(即map集合的长度)
int size = map1.size();
//9.如果map集合中存在键(aa),则不做改变,如果不存在,则把键(aa)和值(aaaaa)插入到map集合中
map1.putIfAbsent("aa","aaaaa");
/*10.修改指定键的值,如果存在键(bb1),则修改,反之不修改,返回null; 与 map1.put()方法的区别是map1.put()方法如果存在键(bb1),则修改,不存在,则把键(bb1)和值(bbbb)插入到map集合 */
String replace = map1.replace("bb1", "bbbb");
//11.获取指定 key(aa) 对应对 value,如果找不到 key ,则返回设置的默认值(ssssss)
String orDefault = map1.getOrDefault("aa", "ssssss");
//12.克隆map集合(是一种浅拷贝,map集合中的值如果是引用类型,map1.clone()只会把引用地址拷贝过去;所以当map1中的引用类型的值发生改变后,clone中的值也会随之发生改变)
Object clone = map1.clone();