小练习——读取文件中重复次数最多的十个数据

版权声明: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());

        }
    }
}

在这里插入图片描述
部分文件如图示:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/sspudding/article/details/88809350