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 

个人代码,如有错误,欢迎指正

posted @ 2022-05-21 00:12  柏木カケル  阅读(64)  评论(0)    收藏  举报