java 如何统计
Java统计方法
在Java中,统计可以通过多种方式实现,具体取决于统计的对象和需求。以下是几种常见的统计方法:
统计数组中元素的出现次数
使用HashMap可以高效地统计数组中各元素的出现次数。以下是一个示例代码:
import java.util.HashMap;
import java.util.Map;
public class CountElements {
public static void main(String[] args) {
int[] array = {1, 2, 3, 2, 1, 3, 4, 5};
Map<Integer, Integer> countMap = new HashMap<>();
for (int num : array) {
countMap.put(num, countMap.getOrDefault(num, 0) + 1);
}
System.out.println(countMap);
}
}
统计字符串中字符的出现次数
类似地,可以统计字符串中每个字符的出现次数:
import java.util.HashMap;
import java.util.Map;
public class CountChars {
public static void main(String[] args) {
String str = "hello world";
Map<Character, Integer> charCount = new HashMap<>();
for (char c : str.toCharArray()) {
charCount.put(c, charCount.getOrDefault(c, 0) + 1);
}
System.out.println(charCount);
}
}
使用Java 8的流式API进行统计
Java 8引入了流式API,可以更简洁地实现统计功能:
import java.util.Arrays;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
public class StreamCount {
public static void main(String[] args) {
String[] words = {"apple", "banana", "apple", "orange", "banana", "apple"};
Map<String, Long> wordCount = Arrays.stream(words)
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
System.out.println(wordCount);
}
}
统计文件中的行数或单词数
对于文件内容的统计,可以使用BufferedReader逐行读取并计数:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class FileStats {
public static void main(String[] args) throws IOException {
String filePath = "example.txt";
int lineCount = 0;
int wordCount = 0;
try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = br.readLine()) != null) {
lineCount++;
wordCount += line.split("\\s+").length;
}
}
System.out.println("Lines: " + lineCount);
System.out.println("Words: " + wordCount);
}
}
使用第三方库进行高级统计
如果需要更复杂的统计功能(如均值、方差等),可以使用Apache Commons Math或Google Guava等库:

import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
public class AdvancedStats {
public static void main(String[] args) {
double[] values = {1.0, 2.0, 3.0, 4.0, 5.0};
DescriptiveStatistics stats = new DescriptiveStatistics();
for (double v : values) {
stats.addValue(v);
}
System.out.println("Mean: " + stats.getMean());
System.out.println("Variance: " + stats.getVariance());
System.out.println("Max: " + stats.getMax());
}
}
注意事项
- 对于大数据量的统计,需考虑内存和性能优化。
- 在多线程环境下进行统计时,需使用线程安全的数据结构或同步机制。
- 统计字符串或文件内容时,需注意字符编码问题。






