Java集合Map之HashMap常用操作

感兴趣的话大家可以关注一下公众号 : 猿人刘先生 , 欢迎大家一起学习 , 一起进步 , 一起来交流吧!

Map

Map是一个将键(key)映射到值(value)的对象 , Map中每一个元素都有一个key对象和value对象 , 并且key是不能重复的 , Map中有两个重要的实现类 , 一个是HashMap , 这个集合是无序且不安全的集合 , 最多有一个元素为null , 还有一个就是TreeMap , 可以对key进行排序 , HashMap底层是通过哈希表来实现的 , 所以可以先看一下我之前的一篇文章(公众号) :

java集合框架Map之HashMap底层原理解析
这个是我的公众号 , 大家顺便可以关注一下 , 谢谢

版本

  • JDK1.7 : 数组 + 链表

  • JDK1.8 : 数组 + 链表/红黑树

在我看来 , 链表是为了解决hash碰撞使用的一种方法 : 拉线法 , 而红黑树是为了解决"拉的这个线"(链表存储的元素太多)过长的话元素遍历慢的问题

HashMap基本属性

// 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常用操作

1.添加元素 : V put(K key, V value)

HashMap hashMap = new HashMap<>();
        
System.out.println(hashMap);
        
// 添加元素
hashMap.put("1","name");
hashMap.put("2","age");
        
System.out.println("添加元素之后的hashMap为 :" + hashMap);

2.访问元素 : V get(Object key)

HashMap hashMap = new HashMap<>();
// 添加元素
hashMap.put("1","name");
hashMap.put("2","age");
// 获取元素
String s = hashMap.get("1");
System.out.println("获取到 key 是 1 的元素为 : " + s);

3.计算 hashMap 中键/值对的数量 : int size()

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);

4.删除元素 : V remove(Object key)

HashMap hashMap = new HashMap<>();
// 添加元素
hashMap.put("1","name");
hashMap.put("2","age");
// 删除元素
String remove = hashMap.remove("2");
System.out.println("删除 key 是2的元素 : " + remove);

5.判断HashMap是否为空: boolean isEmpty()

HashMap hashMap = new HashMap<>();
// 添加元素
hashMap.put("1","name");
hashMap.put("2","age");

System.out.println("hashMap的元素是否为空 : " + hashMap.isEmpty());

6.将所有的键/值对添加到hashMap 中 : void putAll(Map m)

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);

7.返回 hashMap 中所有映射项的集合 : Set> entrySet()

HashMap hashMap = new HashMap<>();
hashMap.put("1","name");
hashMap.put("2","age");
// 返回 hashMap 中所有映射项的集合
System.out.println("hashMap 中所有映射项的集合 : " + hashMap.entrySet());

8.返回hashMap中的所有值 : Collection values()

HashMap hashMap = new HashMap<>();
// 添加元素
hashMap.put("1","name");
hashMap.put("2","age");
// 返回hashMap中的所有值
System.out.println("hashMap中的所有值 : " + hashMap.values());

9.返回hashMao中的所有key : Set keySet()

HashMap hashMap = new HashMap<>();
// 添加元素
hashMap.put("1","name");
hashMap.put("2","age");
// 返回hashMap中的所有key
System.out.println("hashMao中的所有key : " + hashMap.keySet());

10.检查 hashMap 中是否存在指定的 key 对应的映射关系 : boolean containsKey(Object key)

HashMap hashMap = new HashMap<>();
hashMap.put("1","name");
hashMap.put("2","age");

System.out.println("hashMap中是否包含键为1的键值对 : " + hashMap.containsKey("1"));

11.检查hashMap中是否存在指定的value 对应的映射关系 : boolean containsValue(Object value)

HashMap hashMap = new HashMap<>();
hashMap.put("1","name");
hashMap.put("2","age");

System.out.println("hashMap中是否包含值为name的键值对 : " + hashMap.containsValue("name"));

12.如果 hashMap 中不存在指定的键,则将指定的键/值对插入到 hashMap 中 : V putIfAbsent(K key, V value)

HashMap hashMap = new HashMap<>();
hashMap.put("1","name");
hashMap.put("2","age");

hashMap.putIfAbsent("1","2");
System.out.println("hashMap中的元素为 : " + hashMap);

13.获取指定 key 对应的 value,如果找不到 key ,则返回设置的默认值 : V getOrDefault(Object key, V defaultValue)

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);

14.替换hashMap中是指定的key对应的value : boolean replace(K key, V oldValue, V newValue)

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);

15.将hashMap中的所有映射关系替换成给定的函数所执行的结果 : replaceAll(BiFunction function)

HashMap hashMap = new HashMap<>();
hashMap.put("1","name");
hashMap.put("2","age");

hashMap.replaceAll((key , value) -> value.toUpperCase());

System.out.println("将 hashMap 中的所有映射关系替换成给定的函数所执行的结果 : " + hashMap);

16.删除 hashMap 中的所有键/值对 : void clear()

HashMap hashMap = new HashMap<>();
hashMap.put("1","name");
hashMap.put("2","age");

hashMap.clear();

System.out.println("删除hashMap中所有键/值对 : " + hashMap);

以上就是HashMap中的基本属性及常用的一些方法

你可能感兴趣的:(java,java,链表,开发语言)