Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在HashMap中对值进行排序_Java_Sorting_Hashmap - Fatal编程技术网

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时犯了错误…请注意泛型。)