算法与编程2
从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序:
1,张三,28
2,李四,35
3,张三,28
4,王五,35
5,张三,28
6,李四,35
7,赵六,28
8,田七,35
package cn.suanfa; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.Reader; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.TreeMap; public class Test0222 { public static void main(String[] args) throws IOException { Reader reader=new FileReader("src/data.txt"); BufferedReader buffered=new BufferedReader(reader); String data=null; Map<String, Integer> map=new HashMap<String,Integer>(); while ((data=buffered.readLine())!=null) {//循环读取每一行 String[] sa= data.split(","); //id name age if (map.containsKey(sa[1])) { //集合中已经存在的学生 map.put(sa[1], map.get(sa[1])+1); }else{ map.put(sa[1], 1);//之前没有这个名字作为key } } //将双列集合数据转移到单列集合 List<Entry<String, Integer>> list=new ArrayList<Entry<String,Integer>>(map.entrySet()); Collections.sort(list,new Comparator<Entry<String, Integer>>() { @Override public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { return o1.getValue().compareTo(o2.getValue()); } }); for (Entry<String, Integer> entry : list) { System.out.println(entry.getKey()+"\t"+entry.getValue()); } buffered.close(); reader.close(); } }