Java HashSet size() 方法
size()
方法是 Java 中 HashSet
类的一个内置方法,用于返回当前集合中元素的数量。它的方法签名如下:
方法语法
public int size()
返回值
该方法返回一个 int
类型的值,表示 HashSet
实例中当前存储的元素个数。
重要说明
- 返回值总是非负整数
- 当集合为空时,返回 0
- 返回值反映的是调用时刻的集合大小,后续的添加/删除操作会改变这个值
使用示例
基础用法
实例
import java.util.HashSet;
public class HashSetSizeExample {
public static void main(String[] args) {
// 创建一个新的HashSet
HashSet<String> fruits = new HashSet<>();
// 添加元素
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
// 使用size()方法获取集合大小
int size = fruits.size();
System.out.println("HashSet中的元素数量: " + size); // 输出: 3
}
}
public class HashSetSizeExample {
public static void main(String[] args) {
// 创建一个新的HashSet
HashSet<String> fruits = new HashSet<>();
// 添加元素
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
// 使用size()方法获取集合大小
int size = fruits.size();
System.out.println("HashSet中的元素数量: " + size); // 输出: 3
}
}
空集合的情况
实例
HashSet<Integer> numbers = new HashSet<>();
System.out.println("空HashSet的大小: " + numbers.size()); // 输出: 0
System.out.println("空HashSet的大小: " + numbers.size()); // 输出: 0
动态变化
实例
HashSet<Character> letters = new HashSet<>();
System.out.println("初始大小: " + letters.size()); // 输出: 0
letters.add('A');
letters.add('B');
System.out.println("添加后大小: " + letters.size()); // 输出: 2
letters.remove('A');
System.out.println("删除后大小: " + letters.size()); // 输出: 1
System.out.println("初始大小: " + letters.size()); // 输出: 0
letters.add('A');
letters.add('B');
System.out.println("添加后大小: " + letters.size()); // 输出: 2
letters.remove('A');
System.out.println("删除后大小: " + letters.size()); // 输出: 1
技术细节
时间复杂度
size()
方法的时间复杂度是 O(1),因为 HashSet
内部维护了一个计数器来跟踪元素数量,而不是每次调用时都重新计算。
与容量(capacity)的区别
size()
返回的是实际存储的元素数量- 容量是指底层哈希表的大小,可以通过构造函数设置
- 容量通常大于或等于 size
实例
HashSet<String> set = new HashSet<>(100); // 初始容量100
System.out.println(set.size()); // 输出: 0 (因为还没有元素)
System.out.println(set.size()); // 输出: 0 (因为还没有元素)
实际应用场景
1. 检查集合是否为空
虽然可以使用 isEmpty()
方法,但 size() == 0
也是常见的写法。
实例
if (cartItems.size() == 0) {
System.out.println("购物车为空");
}
System.out.println("购物车为空");
}
2. 限制集合大小
实例
HashSet<User> activeUsers = new HashSet<>();
// ...
if (activeUsers.size() >= MAX_ACTIVE_USERS) {
System.out.println("已达到最大活跃用户数");
}
// ...
if (activeUsers.size() >= MAX_ACTIVE_USERS) {
System.out.println("已达到最大活跃用户数");
}
3. 性能监控
实例
// 记录不同时间点的集合大小以监控内存使用
log.info("当前缓存条目数: " + cache.size());
log.info("当前缓存条目数: " + cache.size());
注意事项
并发环境:
HashSet
不是线程安全的,在多线程环境下使用size()
可能会得到不准确的结果。考虑使用ConcurrentHashMap
或同步包装器。与其它集合方法的配合:
实例
// 先检查size可以避免不必要的操作
if (set1.size() == set2.size() && set1.containsAll(set2)) {
System.out.println("两个集合相等");
}
内存考虑:大型
HashSet
会占用较多内存,定期检查size()
可以帮助识别内存问题。
总结
HashSet
的 size()
方法是一个简单但非常有用的工具,它提供了集合当前状态的快速快照。理解并正确使用这个方法可以帮助你编写更高效、更可靠的 Java 代码。
点我分享笔记