怎么才能让HashMap集合按照Key键来排序?

来源:2-1 案例:对整型进行排序

电磁护盾

2019-10-18 00:48:54

import java.util.ArrayList; 
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.Map;
import java.util.Map.Entry;


public class T8_1 {
	
    public static void main(String[] args) {
    	List<Integer> list=new ArrayList<>();
    	list.add(100);
    	list.add(100);
    	list.add(1);
    	list.add(2);
    	list.add(3);
    	list.add(6);
    	list.add(8);
    	list.add(7);
    	list.add(7);
    	list.add(8);
    	list.add(2);
    	list.add(2);
    	list.add(1);
    	list.add(2);
    	Collections.sort(list);

    	for(int q:list) {
    		System.out.println(q);
    	}

        Map<Integer, Integer> map = new HashMap<>();
        for (Integer inte : list) {
          Integer num = map.get(inte);
          
          map.put(inte, num == null ? 1 : num + 1);//如果没关联过,值就为1;如果关联过一次,值就为1+1=2
          
        }
               
        Set<Map.Entry<Integer, Integer>> set = map.entrySet();
    
        Iterator<Map.Entry<Integer, Integer>> it = set.iterator();
        
        while (it.hasNext()) {
          Map.Entry<Integer, Integer> entry =it.next();
          System.out.println(entry.getKey() + ":" + entry.getValue()+ "次");
        }

    }
		
}

http://img.mukewang.com/climg/5da89b0f09a1e92b04670733.jpg

我想让这个“100:2次”      最后显示

写回答

1回答

好帮手慕酷酷

2019-10-18

同学你好,可以通过将map转换为list,然后重写compareTo方法来实现排序,

具体代码如下:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class EmployeeTest {

	public static void main(String[] args) {
		List<Integer> list = new ArrayList<>();
		list.add(100);
		list.add(100);
		list.add(1);
		list.add(2);
		list.add(3);
		list.add(6);
		list.add(8);
		list.add(7);
		list.add(7);
		list.add(8);
		list.add(2);
		list.add(2);
		list.add(1);
		list.add(2);
		Collections.sort(list);

		for (int q : list) {
			System.out.println(q);
		}

		Map<Integer, Integer> map = new HashMap<>();
		for (Integer inte : list) {
			Integer num = map.get(inte);

			map.put(inte, num == null ? 1 : num + 1);// 如果没关联过,值就为1;如果关联过一次,值就为1+1=2

		}

		List<Map.Entry<Integer, Integer>> infoIds = new ArrayList<Map.Entry<Integer, Integer>>(map.entrySet());  //将map转换为list进行排序
		   
        // 对HashMap中的key 进行排序  
        Collections.sort(infoIds, new Comparator<Map.Entry<Integer, Integer>>() {  
           @Override
            public int compare(Map.Entry<Integer, Integer> o1,  Map.Entry<Integer, Integer> o2) {  
                return (o1.getKey()).compareTo(o2.getKey());  
            }  
        });  
        // 对HashMap中的key 进行排序后  显示排序结果  
    	for (Map.Entry<Integer, Integer> mapping : infoIds) {
			System.out.println(mapping.getKey() + ":" + mapping.getValue());
		}
           
        System.out.println();  

	}

}

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

0

0 学习 · 11489 问题

查看课程