根据自定义值对HashMap进行sorting(在我的例子中,它是一个叫做DATA的类)

有没有办法在频率上sorting(降序/升序)?

public static void main(String[] args) { Map <String, Data> map = new HashMap <String, Data>(); String [] variables={"variable1", "variable2", "variable3", "variable4", "variable4", "variable1","variable1"}; int Concreteness=5;//for this example every variable will have the same cncreteness for(int i=0; i<variables.length;i++) { Data variable_exists=map.get(variables[i]); if(variable_exists!=null) variable_exists.setFrecuency(variable_exists.getFrecuency()+1); else map.put(variables[i], new Data(Concreteness,1)); } for (Map.Entry<String, Data> entry : map.entrySet()) { System.out.println("variable = " + entry.getKey() + ", Frecuency = " + entry.getValue().getFrecuency()+ ", Concreteness = " + entry.getValue().getConcreteness()); } } 

这个例子的输出是

variable = variable4,Frecuency = 2,Concreteness = 5

variable = variable1,Frecuency = 3,Concreteness = 5

variable = variable2,Frecuency = 1,Concreteness = 5

variable = variable3,Frecuency = 1,Concreteness = 5

这里是我使用的Data类

 public class Data { private int frecuency; private int Concreteness; Data (int Concreteness, int frecuency) { setFrecuency(frecuency); setConcreteness(Concreteness); } public int getFrecuency() { return frecuency; } public void setFrecuency(int frecuenxy) { this.frecuency = frecuenxy; } public int getConcreteness() { return Concreteness; } public void setConcreteness(int Concreteness) { this.Concreteness = Concreteness; } } 

您不能对HashMap<K,V>sorting,但是如果您创build了其键 – 值对列表

 List<Map.Entry<String,Data>> entries = new ArrayList<Map.Entry<String,Data>>(map.entrySet()); 

您将能够使用自定义比较器对其进行sorting。 这是一个链接到问答解释如何做到这一点 。