📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)
📝 职场经验干货:
HashMap
和 HashSet
是 Java 中两个重要的集合类,它们有不同的用途和特性。下面是对它们之间的区别、线程安全性,以及一些代码示例的详细介绍。
区别
-
数据结构:
- HashMap
一个基于哈希表的键值对映射,允许通过键访问值。每个键都是唯一的。
- HashSet
封装了一个 HashMap,用于存储唯一的元素,不允许重复的值。
- HashMap
-
存储的内容:
- HashMap
存储的是键值对 (
key-value
)。 - HashSet
存储的是单独的值,不关心其对应的键。
- HashMap
-
实现原理:
- HashMap
内部使用一个数组和链表(或红黑树)来存储数据。
- HashSet
实际上就是一个
HashMap
,其中只有键(元素)而无值。
- HashMap
-
线程安全性:
- HashMap
不是线程安全的。在多线程环境中可能会导致数据不一致。
- HashSet
同样不是线程安全的。如果在多线程环境下使用,建议使用
Collections.synchronizedSet(new HashSet<>());
或ConcurrentHashMap
用作HashSet
的底层存储。
- HashMap
代码示例
下面是使用 HashMap
和 HashSet
的简单用法示例。
HashMap 示例
import java.util.HashMap;
public class HashMapExample {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
// 添加数据
map.put("Alice", 30);
map.put("Bob", 25);
map.put("Charlie", 35);
// 获取数据
System.out.println("Alice's age: " + map.get("Alice"));
// 遍历键值对
for (String key : map.keySet()) {
System.out.println(key + "'s age: " + map.get(key));
}
}
}
HashSet 示例
import java.util.HashSet;
public class HashSetExample {
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
// 添加元素
set.add("Apple");
set.add("Banana");
set.add("Cherry");
// 尝试添加重复元素
set.add("Apple"); // 这将不会被添加进去,因为 HashSet 中不允许重复
// 遍历集合
for (String fruit : set) {
System.out.println(fruit);
}
System.out.println("Set contains 'Banana': " + set.contains("Banana"));
}
}
当需要线程安全时
对于 HashMap
和 HashSet
的线程安全版本,可以使用:
1.HashMap 的线程安全实现:
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
Map<String, Integer> syncMap = Collections.synchronizedMap(new HashMap<>());
2.HashSet 的线程安全实现:
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
Set<String> syncSet = Collections.synchronizedSet(new HashSet<>());
总结
-
使用 HashMap 来存储键值对数据;使用 HashSet 来存储唯一的元素。
-
如果在多线程环境中使用这两个类,确保使用线程安全的实现。希望这个说明能帮助你理解它们之间的区别和适用场景!如果有其他问题,请随时问我!
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】