11章-练习23


import java.util.*;

/**
* 练习23:从Statistics.java开始,写一个程序,让它重复做测试,观察是否某个数字比别的数字出现的次数多
*/
public class Exercise23 {

public static void main(String[] args) {
Map<Integer, Integer> m = new HashMap<Integer, Integer>();
for (int i = 0; i < 5; i++) {
statistics(m);
System.out.println(sortMap(m));
}

}

/**
* Statistics.java 功能
* 生成10000次20以内的数字
*
* @param m 上一次的统计结果
*/
public static void statistics(Map<Integer, Integer> m) {
Random rand = new Random(47);
for (int i = 0; i < 10000; i++) {
// Produce a number between 0 and 20:
int r = rand.nextInt(20);
Integer freq = m.get(r);
m.put(r, freq == null ? 1 : freq + 1);
}
}

public static Map<Integer, Integer> sortMap(Map<Integer, Integer> map) {

//利用Map的entitySet方法,转化为list进行排序
List<Map.Entry<Integer, Integer>> entryList = new ArrayList<>(map.entrySet());
//利用Collections的sort方法对list排序
Collections.sort(entryList, 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();
}
});
//遍历排序好的list,一定要放进LinkedHashMap,因为只有LinkedHashMap是根据插入顺序进行存储
LinkedHashMap<Integer, Integer> linkedHashMap = new LinkedHashMap();
for (Map.Entry<Integer, Integer> entry : entryList) {
linkedHashMap.put(entry.getKey(), entry.getValue());
}
return linkedHashMap;
}

}
/*
{9=549, 16=533, 11=531, 12=521, 6=519, 10=513, 17=509, 3=508, 13=506, 5=503, 1=502, 15=497, 2=489, 0=481, 4=481, 18=478, 14=477, 7=471, 8=468, 19=464}
{9=1098, 16=1066, 11=1062, 12=1042, 6=1038, 10=1026, 17=1018, 3=1016, 13=1012, 5=1006, 1=1004, 15=994, 2=978, 0=962, 4=962, 18=956, 14=954, 7=942, 8=936, 19=928}
{9=1647, 16=1599, 11=1593, 12=1563, 6=1557, 10=1539, 17=1527, 3=1524, 13=1518, 5=1509, 1=1506, 15=1491, 2=1467, 0=1443, 4=1443, 18=1434, 14=1431, 7=1413, 8=1404, 19=1392}
{9=2196, 16=2132, 11=2124, 12=2084, 6=2076, 10=2052, 17=2036, 3=2032, 13=2024, 5=2012, 1=2008, 15=1988, 2=1956, 0=1924, 4=1924, 18=1912, 14=1908, 7=1884, 8=1872, 19=1856}
{9=2745, 16=2665, 11=2655, 12=2605, 6=2595, 10=2565, 17=2545, 3=2540, 13=2530, 5=2515, 1=2510, 15=2485, 2=2445, 0=2405, 4=2405, 18=2390, 14=2385, 7=2355, 8=2340, 19=2320}
*///:~
posted @ 2022-08-25 14:35  loadL  阅读(25)  评论(0)    收藏  举报