版权声明:ssupdding https://blog.csdn.net/sspudding/article/details/88809350
写代码时都要先理一下思路再写呀
所以呢~
先理思路
1、先创建流进行读取文件中的数据,并根据","进行分割数据,因为数是一行一行存放的,每行存放的数据个数都不同,所以要用缓冲流进行读取
2、将数据存入ArrayList中
3、通过HashMap计算每个数据出现的次数,key存储数据,value存储出现的次数
4、通过优先级队列(大根堆)进行排序
5、输出前十个,即为出现次数最多的十个数据
package exercise;
import java.io.*;
import java.util.*;
/**
* Description:
* author:SS
* Date: 2019/3/22 20:47
* packageName: exercise
*/
public class Demo {
public static void main(String[] args) throws IOException {
String path = "C:\\Users\\lo\\Desktop\\test.txt";
FileInputStream inputStream = new FileInputStream(path);
InputStreamReader is = new InputStreamReader(inputStream);
BufferedReader reader = new BufferedReader(is);
String line = null;
ArrayList<Integer> arrayList = new ArrayList<>();
while ((line = reader.readLine()) != null){
String[] num = line.split(",");
for (int i = 0; i < num.length; i++) {
arrayList.add(Integer.valueOf(num[i]));
}
}
HashMap<Integer,Integer> hashMap = new HashMap<>(); //key存储数据,value为出现的次数
Iterator<Integer> iterator = arrayList.iterator();
while (iterator.hasNext()){
Integer key = iterator.next();
Integer num;
if ((num = hashMap.get(key)) != null){
hashMap.put(key,hashMap.get(key)+1);
}else {
hashMap.put(key,1);
}
}
PriorityQueue<Map.Entry<Integer,Integer>> priorityQueue = new PriorityQueue<>(1000, new Comparator<Map.Entry<Integer, Integer>>() {
@Override
public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
return o2.getValue()-o1.getValue();
}
});
Iterator<Map.Entry<Integer,Integer>> it = hashMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry <Integer, Integer> entry = it.next();
priorityQueue.add(entry);
}
for (int i = 0; i < 10; i++) {
Map.Entry <Integer, Integer> entry = priorityQueue.poll();
System.out.println(entry.getKey()+":"+entry.getValue());
}
}
}
部分文件如图示: