JavaSE22——HashMap

集合框架_HashMap

一、概述

HashMap 是用于存储 Key-Value 键值对的集合。

(1)HashMap 根据键的 hashCode 值存储数据,大多数情况下可以直接定位到它的值,所以具有很快的访问速度,但遍历顺序不确定。

(2) HashMap 中键 key 为 null 的记录至多只允许一条,值 value 为 null 的记录可以有多条。

(3) HashMap 非线程安全,即任一时刻允许多个线程同时写 HashMap,可能会导致数据的不一致。

二、特点

HashMap的特点主要有以下几点:

  1. 线程不安全:HashMap不是线程安全的容器,不适用于多线程环境。如果需要在多线程环境下使用Map,可以考虑使用ConcurrentHashMap或者通过加锁等方式来保证线程安全。
  2. 哈希表实现:HashMap使用哈希表(Hash Table)实现,它通过散列函数将键映射到哈希表的索引位置上,从而实现了快速的插入、删除和查找操作。
  3. 元素无序:HashMap并不保证元素的顺序,元素在哈希表中的位置取决于键的哈希值和哈希表的容量。
  4. 键不重复:HashMap中的键是不允许重复的,如果添加一个键值对时发现键已经存在,则会覆盖原有的值。
  5. 可以存放null:HashMap中的键和值都可以存放null,但是需要注意并发情况下的线程安全性。
  6. 性能高效:由于使用了哈希表实现,HashMap的插入、删除和查找操作的时间复杂度都接近常数级别,因此具有高效的性能。

总之,HashMap是一种常用的数据结构,其主要特点是高效、无序、键不重复,但不具备线程安全性。在使用时需要根据具体应用场景进行选择和设计。

三 使用示例

HashMap 类位于 java.util 包中,使用前需要引入它,语法格式如下:

java 复制代码
import java.util.HashMap; // 引入 HashMap 类

以下实例我们创建一个 HashMap 对象 Sites, 整型(Integer)的 key 和字符串(String)类型的 value:

java 复制代码
HashMap<Integer, String> Sites = new HashMap<Integer, String>();

HashMap常用方法:

1、put(K key, V value): 将键(key)/值(value)映射存放到Map集合中。

2、get(Object key): 返回指定键所映射的值,没有该key对应的值则返回 null。

3、size(): 返回Map集合中数据数量。

4、clear(): 清空Map集合。

5、isEmpty(): 判断Map集合中是否有数据,如果没有则返回true,否则返回false。

6、remove(Object key): 删除Map集合中键为key的数据并返回其所对应value值。

7、values(): 返回Map集合中所有value组成的以Collection数据类型格式数据。

8、containsKey(Object key): 判断集合中是否包含指定键,包含返回 true,否则返回false。

9、containsValue(Object value): 判断集合中是否包含指定值,包含返回 true,否则返回false。

10、keySet(): 返回Map集合中所有key组成的Set集合。

11、entrySet(): 将Map集合每个key-value转换为一个Entry对象并返回由所有的Entry对象组成的Set集合。

1 添加元素

1.1 HashMap 类提供了很多有用的方法,添加键值对(key-value)可以使用 put() 方法:

实例

java 复制代码
// 引入 HashMap 类      
import java.util.HashMap;

public class worldTest {
    public static void main(String[] args) {
        // 创建 HashMap 对象 Sites
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // 添加键值对
        Sites.put(1, "hello");
        Sites.put(2, "world");
        Sites.put(3, "hi");
        Sites.put(4, "china");
        System.out.println(Sites);
    }
}

1.2 以下实例创建一个字符串(String)类型的 key 和字符串(String)类型的 value:

实例

java 复制代码
// 引入 HashMap 类      
import java.util.HashMap;

public class worldTest {
    public static void main(String[] args) {
        // 创建 HashMap 对象 Sites
        HashMap<String, String> Sites = new HashMap<String, String>();
        // 添加键值对
        Sites.put("one", "hello");
        Sites.put("two", "world");
        Sites.put("three", "hi");
        Sites.put("four", "china");
        System.out.println(Sites);
    }
}

2 访问元素

我们可以使用 get(key) 方法来获取 key 对应的 value:

实例

java 复制代码
// 引入 HashMap 类      
import java.util.HashMap;

public class worldTest {
    public static void main(String[] args) {
        // 创建 HashMap 对象 Sites
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // 添加键值对
        Sites.put(1, "hello");
        Sites.put(2, "world");
        Sites.put(3, "hi");
        Sites.put(4, "china");
        System.out.println(Sites.get(3));
    }
}

3 删除元素

3.1 我们可以使用 remove(key) 方法来删除 key 对应的键值对(key-value):

实例

java 复制代码
// 引入 HashMap 类      
import java.util.HashMap;

public class worldTest {
    public static void main(String[] args) {
        // 创建 HashMap 对象 Sites
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // 添加键值对
        Sites.put(1, "hello");
        Sites.put(2, "world");
        Sites.put(3, "hi");
        Sites.put(4, "china");
        Sites.remove(4);
        System.out.println(Sites);
    }
}

3.2 删除所有键值对(key-value)可以使用 clear 方法:

实例

java 复制代码
// 引入 HashMap 类      
import java.util.HashMap;

public class worldTest {
    public static void main(String[] args) {
        // 创建 HashMap 对象 Sites
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // 添加键值对
        Sites.put(1, "hello");
        Sites.put(2, "world");
        Sites.put(3, "hi");
        Sites.put(4, "china");
        Sites.clear();
        System.out.println(Sites);
    }
}

4 计算大小

如果要计算 HashMap 中的元素数量可以使用 size() 方法:

实例

java 复制代码
// 引入 HashMap 类      
import java.util.HashMap;

public class worldTest {
    public static void main(String[] args) {
        // 创建 HashMap 对象 Sites
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // 添加键值对
        Sites.put(1, "hello");
        Sites.put(2, "world");
        Sites.put(3, "hi");
        Sites.put(4, "china");
        System.out.println(Sites.size());
    }
}

5 迭代 HashMap

可以使用 for-each 来迭代 HashMap 中的元素。

如果你只想获取 key,可以使用 keySet() 方法,然后可以通过 get(key) 获取对应的 value,如果你只想获取 value,可以使用 values() 方法。

实例

java 复制代码
// 引入 HashMap 类      
import java.util.HashMap;

public class worldTest {
    public static void main(String[] args) {
        // 创建 HashMap 对象 Sites
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // 添加键值对
        Sites.put(1, "hello");
        Sites.put(2, "world");
        Sites.put(3, "hi");
        Sites.put(4, "china");
        // 输出 key 和 value
        for (Integer i : Sites.keySet()) {
            System.out.println("key: " + i + " value: " + Sites.get(i));
        }
        // 返回所有 value 值
        for(String value: Sites.values()) {
          // 输出每一个value
          System.out.print(value + ", ");
        }
    }
}

6 复制一份 hashMap

方法:clone()

实例

java 复制代码
public static void main(String[] args) {
    HashMap<String, String> map = new HashMap<>();
    map.put("A","1");
    map.put("B","2");
    map.put("C","3");
    Object clone = map.clone();
    System.out.println("原来的"+map);
    System.out.println("复制一份"+clone);
}

7 判断 hashMap 是否为空

方法:isEmpty()

实例

java 复制代码
public static void main(String[] args) {
    HashMap<String, String> map = new HashMap<>();
    HashMap<String, String> map1 = new HashMap<>();
    map.put("A","1");
    map.put("B","2");
    map.put("C","3");
    boolean empty1 = map.isEmpty();
    boolean empty2 = map1.isEmpty();

    System.out.println(empty1);
    System.out.println(empty2);
}

8 替换 hashMap 中是指定的 key 对应的 value

方法:replace()

实例

java 复制代码
public static void main(String[] args) {
    HashMap<String, String> map = new HashMap<>();
    HashMap<String, String> map1 = new HashMap<>();
    map.put("A","1");
    map.put("B","2");
    map.put("C","3");
    System.out.println("替换前----"+map);
     map.replace("A", "100");
    System.out.println("替换后----"+map);
}
相关推荐
paopaokaka_luck1 分钟前
基于Spring Boot+Vue的多媒体素材管理系统的设计与实现
java·数据库·vue.js·spring boot·后端·算法
guoruijun_2012_48 分钟前
fastadmin多个表crud连表操作步骤
android·java·开发语言
Hello-Brand18 分钟前
Java核心知识体系10-线程管理
java·高并发·多线程·并发·多线程模型·线程管理
乐悠小码24 分钟前
数据结构------队列(Java语言描述)
java·开发语言·数据结构·链表·队列
史努比.26 分钟前
Pod控制器
java·开发语言
2的n次方_29 分钟前
二维费用背包问题
java·算法·动态规划
皮皮林55129 分钟前
警惕!List.of() vs Arrays.asList():这些隐藏差异可能让你的代码崩溃!
java
莳光.29 分钟前
122、java的LambdaQueryWapper的条件拼接实现数据sql中and (column1 =1 or column1 is null)
java·mybatis
程序猿麦小七34 分钟前
基于springboot的景区网页设计与实现
java·spring boot·后端·旅游·景区
weisian15141 分钟前
认证鉴权框架SpringSecurity-2--重点组件和过滤器链篇
java·安全