/**
* 统计文件中出现最多次数的5组数字(整个文件由数字和逗号组成)
* 1、读取文件,获取数据
* 3、通过HashMap进行数据出现次数统计
* 4、使用PriorityQueue进行出现次数最多的5组数据统计
*/
public class GetDataTimes {
public static void main(String[] args) {
String path = "D:\\test\\readerFile.txt";//文件路径
FileInputStream fileInputStream = null;
BufferedReader bufferedReader = null;
HashMap<Integer, Integer> hashMap = new HashMap<>();//key为出现的数字,value为出现的次数
try {
bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(path)));
String s;//保存每行的内容
while ((s=bufferedReader.readLine()) != null) {//按行读取数据
String[] split = s.split(",");//每行按,分割放进split数组
for (int i = 0; i < split.length; i++) {
Integer integer = Integer.valueOf(split[i]);
if (hashMap.containsKey(integer)) {//若这个数字出现过则value加1
hashMap.put(integer, hashMap.get(integer) + 1);
} else {//若没出现过value置为1
hashMap.put(integer, 1);
}
}
}
//队列中保存出现次数最多(map中value最大)的5组键值对
PriorityQueue<Map.Entry<Integer, Integer>> queue = new PriorityQueue<>(new Comparator<Map.Entry<Integer, Integer>>() {
@Override
public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
return o1.getValue() - o2.getValue();//此比较器队头value最大
}
});
Iterator<Map.Entry<Integer, Integer>> iterator = hashMap.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<Integer, Integer> next = iterator.next();
if (queue.size() < 5) {
queue.add(next);
} else if (next.getValue().compareTo(queue.peek().getValue()) > 0) {
queue.poll();
queue.add(next);
}
}
//打印优先级队列中的数据
Iterator<Map.Entry<Integer, Integer>> iterator1 = queue.iterator();
while (iterator1.hasNext()) {
Map.Entry<Integer, Integer> next = iterator1.next();
System.out.println(next.getKey() + ":" + next.getValue());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {//关闭流
try {
if (fileInputStream != null)
fileInputStream.close();
if (fileInputStream != null)
fileInputStream.close();
if (bufferedReader != null)
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
java文件io——统计文件中出现次数最多的5组数字
最新推荐文章于 2023-06-07 03:48:28 发布