上一篇                     
               
			  Java计数方法有哪些
- 后端开发
- 2025-06-20
- 3801
 在Java中计数通常使用变量自增实现,如int count=0后通过count++累加,数组计数可用索引映射(如arr[i]++),对象计数推荐HashMap(map.put(key,map.getOrDefault(key,0)+1)),多线程场景需用AtomicInteger等原子类保证线程安全。
 
基础变量计数
适用于简单场景,如循环次数统计。
int count = 0; // 初始化计数器
for (int i = 0; i < 100; i++) {
    if (i % 2 == 0) {
        count++; // 条件满足时自增
    }
}
System.out.println("偶数个数: " + count); // 输出结果 
数组元素计数
统计数组中特定元素的出现次数。

int[] numbers = {1, 2, 3, 2, 4, 2, 5};
int target = 2;
int frequency = 0;
for (int num : numbers) {
    if (num == target) {
        frequency++;
    }
}
System.out.println(target + " 出现次数: " + frequency); 
集合框架计数
List/Set 计数
使用 Collections.frequency() 快速统计:
List<String> words = Arrays.asList("apple", "banana", "apple", "orange");
int appleCount = Collections.frequency(words, "apple"); // 返回2 
Map 实现高级计数
统计单词频率(最优方案):

List<String> words = Arrays.asList("a", "b", "a", "c", "b");
Map<String, Integer> counter = new HashMap<>();
for (String word : words) {
    counter.put(word, counter.getOrDefault(word, 0) + 1);
}
// 输出:{a=2, b=2, c=1} 
Java 8 Stream API 简化
Map<String, Long> result = words.stream()
    .collect(Collectors.groupingBy(
        word -> word, 
        Collectors.counting()
    )); 
并发场景下的安全计数
多线程环境中使用原子类避免竞争:
AtomicInteger threadSafeCounter = new AtomicInteger(0);
// 多线程中安全递增
threadSafeCounter.incrementAndGet(); 
// 示例:10个线程各增加100次
ExecutorService executor = Executors.newFixedThreadPool(10);
for (int i = 0; i < 1000; i++) {
    executor.submit(() -> threadSafeCounter.incrementAndGet());
}
executor.shutdown();
System.out.println("最终计数: " + threadSafeCounter.get()); // 输出1000 
大数据量计数优化
使用 LongAdder 提升高并发性能:
LongAdder adder = new LongAdder();
adder.increment(); // 计数+1
adder.add(5);      // 增加指定值
System.out.println("总和: " + adder.sum()); // 获取结果 
实际应用场景
- 用户行为统计
 记录按钮点击次数:clickCounter++。
- 文本分析
 用Map统计词频(如上述示例)。
- 实时监控
 使用AtomicInteger记录系统请求量。
方法选择指南
| 场景 | 推荐方法 | 优势 | 
|---|---|---|
| 单线程简单计数 | int/long变量 | 简单高效 | 
| 集合元素频率统计 | HashMap+ 循环 | 灵活通用 | 
| Java 8+ 集合统计 | Stream API | 代码简洁 | 
| 高并发计数 | AtomicInteger | 线程安全 | 
| 极高并发求和 | LongAdder | 性能最优 | 
注意事项
- 作用域控制:计数器变量需定义在合适的作用域(如方法内或类成员)。
- 初始化:确保计数器初始化为0,避免未定义行为。
- 并发安全:多线程场景必须使用原子类或同步机制(如 synchronized)。
引用说明: 参考 Oracle 官方文档 《Java Collections Framework》 和 《java.util.concurrent.atomic》,并结合实践案例总结,代码示例遵循 Java SE 8+ 语法规范。

 
  
			 
			 
			 
			 
			 
			