Java 在HashMap中对值进行排序
我有一个Java 在HashMap中对值进行排序,java,sorting,hashmap,Java,Sorting,Hashmap,我有一个HashMap,我想将值按整数的升序放入PriorityQueue。我很难想出一个办法来做这件事。我有一个可以保存值的节点类,因此:PriorityQueue在这种情况下,我不会使用映射 编写自己的对/节点类,该类保存字符和整数,并使该类实现可比较 您可以在Compariable上阅读 在节点类中,必须实现compareTo方法,如下所示: public int compareTo(Node o) { return this.idd - o.idd ; } 其中id是保存整数的
HashMap
,我想将值按整数的升序放入PriorityQueue
。我很难想出一个办法来做这件事。我有一个可以保存值的节点
类,因此:PriorityQueue
在这种情况下,我不会使用映射
编写自己的对
/节点
类,该类保存字符
和整数
,并使该类实现可比较
您可以在Compariable
上阅读
在节点类中,必须实现compareTo
方法,如下所示:
public int compareTo(Node o) {
return this.idd - o.idd ;
}
其中id是保存整数的变量
这样,您可以将它们放入
SortedSet
中,如TreeSet
或您在问题中提到的PriorityQueue
,在这种情况下,我不会使用映射
编写自己的对
/节点
类,该类保存字符
和整数
,并使该类实现可比较
您可以在Compariable
上阅读
在节点类中,必须实现compareTo
方法,如下所示:
public int compareTo(Node o) {
return this.idd - o.idd ;
}
其中id是保存整数的变量
这样,您可以将它们放入分类数据集中
,如树集
或您在问题中提到的优先队列
,代码示例:
HashMap<Character, Integer> h = new HashMap<Character, Integer>();
h.put('z',30);
h.put('e',10);
h.put('b',20);
h.put('c',20);
List<Map.Entry> a = new ArrayList<Map.Entry>(h.entrySet());
Collections.sort(a,
new Comparator() {
public int compare(Object o1, Object o2) {
Map.Entry e1 = (Map.Entry) o1;
Map.Entry e2 = (Map.Entry) o2;
return ((Comparable) e1.getValue()).compareTo(e2.getValue());
}
});
for (Map.Entry e : a) {
System.out.println(e.getKey() + " " + e.getValue());
}
代码示例:
HashMap<Character, Integer> h = new HashMap<Character, Integer>();
h.put('z',30);
h.put('e',10);
h.put('b',20);
h.put('c',20);
List<Map.Entry> a = new ArrayList<Map.Entry>(h.entrySet());
Collections.sort(a,
new Comparator() {
public int compare(Object o1, Object o2) {
Map.Entry e1 = (Map.Entry) o1;
Map.Entry e2 = (Map.Entry) o2;
return ((Comparable) e1.getValue()).compareTo(e2.getValue());
}
});
for (Map.Entry e : a) {
System.out.println(e.getKey() + " " + e.getValue());
}
可能重复使用SortedMap
(例如,TreeMap
)取而代之:我在发布之前查看了该线程,但我没有尝试对映射本身进行排序(由于hashmaps的性质,这很复杂,几乎不可能),而是以有序的方式选择它们。yuushi,如果我有选择的话,我会使用树状图或链接哈希图:(你或你创建的节点类对节点类有编辑/子类访问权限吗?可能重复使用SortedMap
(例如,treemap
):我在发布之前查看了该线程,但我没有尝试对映射本身进行排序(由于散列图的性质,这很复杂,几乎不可能),但要以有序的方式选择它们。yuushi,如果我有选择,我会使用树状图或链接的散列图:(由您或您创建的节点类是否具有对节点类的编辑/子类访问权限?好的,实现了comparable和overrode compareTO,使其返回-1表示小于,0表示等于数字,1表示大于。好的,现在只需将节点放入已排序的集合中,并看到神奇的发生。是的,我决定将它们全部放在优先级队列中,然后进行排序。Collections.sort()似乎不适用于我的优先级队列,但:(好的,我重新阅读了priorityQueue上的文档,看起来它是自动排序的。priorityQueue将在插入时自动排序…如果没有,您在实现comparable时犯了错误…请注意genericsok,implemented comparable和overrode compareTO,以便它返回-1表示小于,0表示等于数字,1表示大于.好的,现在只需将节点放在一个排序的集合中,就可以看到神奇的效果。我决定将它们全部放在优先级队列中,然后进行排序。集合。排序()似乎不适用于我的优先级队列:(好的,我重新阅读了priorityQueue上的文档,看起来它是自动排序的。priorityQueue将在插入时自动排序…如果没有,您在实现comparable时犯了错误…请注意泛型。)