感兴趣的话大家可以关注一下公众号 : 猿人刘先生 , 欢迎大家一起学习 , 一起进步 , 一起来交流吧!
Map是一个将键(key)映射到值(value)的对象 , Map中每一个元素都有一个key对象和value对象 , 并且key是不能重复的 , Map中有两个重要的实现类 , 一个是HashMap , 这个集合是无序且不安全的集合 , 最多有一个元素为null , 还有一个就是TreeMap , 可以对key进行排序 , HashMap底层是通过哈希表来实现的 , 所以可以先看一下我之前的一篇文章(公众号) :
java集合框架Map之HashMap底层原理解析
这个是我的公众号 , 大家顺便可以关注一下 , 谢谢
版本
JDK1.7 : 数组 + 链表
JDK1.8 : 数组 + 链表/红黑树
在我看来 , 链表是为了解决hash碰撞使用的一种方法 : 拉线法 , 而红黑树是为了解决"拉的这个线"(链表存储的元素太多)过长的话元素遍历慢的问题
// HashMap默认负载因子0.75
static final float DEFAULT_LOAD_FACTOR = 0.75f;
// HashMap容器默认初始化大小
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;
// HashMap最大容量
static final int MAXIMUM_CAPACITY = 1 << 30;
// HashMap元素存储由链表转换为树的阈值 链表 -> 树 , 当HashMap在扩容(resize())时 , 此时存储在HashMap中元素的位置会重新计算 , 当链表的长度大于8时会转为树
static final int TREEIFY_THRESHOLD = 8;
// HashMap元素存储树转换为链表的阈值 树 -> 链表 , 当HashMap在扩容(resize())时 , 此时存储在HashMap中元素的位置会重新计算 , 当原有的红黑树的数量<6时 , 会转换为链表
static final int UNTREEIFY_THRESHOLD = 6;
// HashMap元素存储最小转为树的阈值 , 当HashMap的容量大于该值时才会将链表转换为树 , 否则的话会直接扩容 , 而不是转换为树 , 为了避免进行扩容、树转换的冲突,这个值不能小于 4 * TREEIFY_THRESHOLD
static final int MIN_TREEIFY_CAPACITY = 64;
HashMap hashMap = new HashMap<>();
System.out.println(hashMap);
// 添加元素
hashMap.put("1","name");
hashMap.put("2","age");
System.out.println("添加元素之后的hashMap为 :" + hashMap);
HashMap hashMap = new HashMap<>();
// 添加元素
hashMap.put("1","name");
hashMap.put("2","age");
// 获取元素
String s = hashMap.get("1");
System.out.println("获取到 key 是 1 的元素为 : " + s);
HashMap hashMap = new HashMap<>()
// 添加元素
hashMap.put("1","name");
hashMap.put("2","age");
// 获取元素
String s = hashMap.get("1");
System.out.println("获取到 key 是 1 的元素为 : " + s);
// 计算大小
int size = hashMap.size();
System.out.println("hashMap 集合的大小为 : " + size);
HashMap hashMap = new HashMap<>();
// 添加元素
hashMap.put("1","name");
hashMap.put("2","age");
// 删除元素
String remove = hashMap.remove("2");
System.out.println("删除 key 是2的元素 : " + remove);
HashMap hashMap = new HashMap<>();
// 添加元素
hashMap.put("1","name");
hashMap.put("2","age");
System.out.println("hashMap的元素是否为空 : " + hashMap.isEmpty());
HashMap hashMapAll = new HashMap<>();
hashMapAll.put("3","username");
hashMapAll.put("4","password");
HashMap hashMap = new HashMap<>();
hashMap.put("1","name");
hashMap.put("2","age");
System.out.println("将所有键/值对添加到 hashMap 之前 : " + hashMap);
// 将所有键/值对添加到 hashMap 中
hashMap.putAll(hashMapAll);
System.out.println("添加元素之后的hashMap为 :" + hashMap);
HashMap hashMap = new HashMap<>();
hashMap.put("1","name");
hashMap.put("2","age");
// 返回 hashMap 中所有映射项的集合
System.out.println("hashMap 中所有映射项的集合 : " + hashMap.entrySet());
HashMap hashMap = new HashMap<>();
// 添加元素
hashMap.put("1","name");
hashMap.put("2","age");
// 返回hashMap中的所有值
System.out.println("hashMap中的所有值 : " + hashMap.values());
HashMap hashMap = new HashMap<>();
// 添加元素
hashMap.put("1","name");
hashMap.put("2","age");
// 返回hashMap中的所有key
System.out.println("hashMao中的所有key : " + hashMap.keySet());
HashMap hashMap = new HashMap<>();
hashMap.put("1","name");
hashMap.put("2","age");
System.out.println("hashMap中是否包含键为1的键值对 : " + hashMap.containsKey("1"));
HashMap hashMap = new HashMap<>();
hashMap.put("1","name");
hashMap.put("2","age");
System.out.println("hashMap中是否包含值为name的键值对 : " + hashMap.containsValue("name"));
HashMap hashMap = new HashMap<>();
hashMap.put("1","name");
hashMap.put("2","age");
hashMap.putIfAbsent("1","2");
System.out.println("hashMap中的元素为 : " + hashMap);
HashMap hashMap = new HashMap<>();
hashMap.put("1","name");
hashMap.put("2","age");
// 获取key为3的值 , 如果获取不到 , 那么返回null
String value = hashMap.getOrDefault("3", null);
System.out.println("获取key为3的值 : " + value);
HashMap hashMap = new HashMap<>();
hashMap.put("1","name");
hashMap.put("2","age");
hashMap.replace("1" , "name" , "name1");
System.out.println("将key为1的值name替换为name1 : " + hashMap);
HashMap hashMap = new HashMap<>();
hashMap.put("1","name");
hashMap.put("2","age");
hashMap.replaceAll((key , value) -> value.toUpperCase());
System.out.println("将 hashMap 中的所有映射关系替换成给定的函数所执行的结果 : " + hashMap);
HashMap hashMap = new HashMap<>();
hashMap.put("1","name");
hashMap.put("2","age");
hashMap.clear();
System.out.println("删除hashMap中所有键/值对 : " + hashMap);
以上就是HashMap中的基本属性及常用的一些方法