Java实验 Map排序
题目要求
使用双列集合Map框架存储湘潭2020年各月份和对应AQI值,按月份分别从高到低、从低到高遍历输出各月份和对应AQI值。
代码
package test4;
import java.util.Collections;
import java.util.HashMap;
import java.util.Set;
import java.util.ArrayList;
import java.util.Arrays;
public class test4 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
HashMap<Integer,Integer> dict = new HashMap<Integer,Integer>();
int[] AQI = {80,59,54,76,68,42,49,59,51,72,72,123};
for(int i=0;i<12;i++) {
dict.put(i+1, AQI[i]);
}//将月份和数值对应起来
Set<Integer> set = dict.keySet();//将HashMap转化存有键值的Set
Object[] arr = set.toArray();//将Set转化成Arrays(数组)
ArrayList<Integer> list = new ArrayList(Arrays.asList(arr));//把数组转化成list
System.out.println("按照月份从低到高排:");
for(int i:list) {
System.out.print(i+"月="+dict.get(i)+" ");
}
System.out.println();
Collections.reverse(list);
System.out.println("按照月份从高到低排:");
for(int i:list) {
System.out.print(i+"月="+dict.get(i)+" ");
}
}
}
其实里面有些操作是多余的,懒得改了^~^
运行结果
按照月份从低到高排:
1月=80 2月=59 3月=54 4月=76 5月=68 6月=42 7月=49 8月=59 9月=51 10月=72 11月=72 12月=123
按照月份从高到低排:
12月=123 11月=72 10月=72 9月=51 8月=59 7月=49 6月=42 5月=68 4月=76 3月=54 2月=59 1月=80
思考
如何使用双列集合Map框架对AQI值按大小排序来求对应月份的顺序。
代码
package think4;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class think4 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
HashMap<Integer,Integer> dict = new HashMap<Integer,Integer>();
int[] AQI = {80,59,54,76,68,42,49,59,51,72,72,123};
for(int i=0;i<12;i++) {
dict.put(i+1, AQI[i]);
}
List<Map.Entry<Integer, Integer>> list = new ArrayList<Map.Entry<Integer, Integer>>(dict.entrySet());
Collections.sort(list,new Comparator<Map.Entry<Integer,Integer>>(){
public int compare(Entry<Integer, Integer> o1, Entry<Integer, Integer> o2) {
return o1.getValue().compareTo(o2.getValue());
}
});
System.out.println("按键值从小到大排序的结果如下:");
for(Entry<Integer,Integer> i:list) {
System.out.print(i+" ");
}
System.out.println();
Collections.sort(list,new Comparator<Map.Entry<Integer,Integer>>(){
public int compare(Entry<Integer, Integer> o1, Entry<Integer, Integer> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
System.out.println("按键值从大到小排序的结果如下:");
for(Entry<Integer,Integer> i:list) {
System.out.print(i+" ");
}
}
}
运行结果
按键值从小到大排序的结果如下:
6=42 7=49 9=51 3=54 2=59 8=59 5=68 10=72 11=72 4=76 1=80 12=123
按键值从大到小排序的结果如下:
12=123 1=80 4=76 10=72 11=72 5=68 2=59 8=59 3=54 9=51 7=49 6=42
个人代码,如有错误,欢迎指正

浙公网安备 33010602011771号