集合框架_HashMap
一、概述
HashMap 是用于存储 Key-Value 键值对的集合。
(1)HashMap 根据键的 hashCode 值存储数据,大多数情况下可以直接定位到它的值,所以具有很快的访问速度,但遍历顺序不确定。
(2) HashMap 中键 key 为 null 的记录至多只允许一条,值 value 为 null 的记录可以有多条。
(3) HashMap 非线程安全,即任一时刻允许多个线程同时写 HashMap,可能会导致数据的不一致。
二、特点
HashMap的特点主要有以下几点:
- 线程不安全:HashMap不是线程安全的容器,不适用于多线程环境。如果需要在多线程环境下使用Map,可以考虑使用ConcurrentHashMap或者通过加锁等方式来保证线程安全。
- 哈希表实现:HashMap使用哈希表(Hash Table)实现,它通过散列函数将键映射到哈希表的索引位置上,从而实现了快速的插入、删除和查找操作。
- 元素无序:HashMap并不保证元素的顺序,元素在哈希表中的位置取决于键的哈希值和哈希表的容量。
- 键不重复:HashMap中的键是不允许重复的,如果添加一个键值对时发现键已经存在,则会覆盖原有的值。
- 可以存放null:HashMap中的键和值都可以存放null,但是需要注意并发情况下的线程安全性。
- 性能高效:由于使用了哈希表实现,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);
}