使用 Java 按 HashMap 类中的值排序

Ert*_*tin 5 java sorting collections hashmap map

我正在尝试获取按值排序的结果 HashMap。

这是 HashMap 的键和值:

map.put("ertu", 5);
map.put("burak", 4);
map.put("selin", 2);
map.put("can", 1);
Run Code Online (Sandbox Code Playgroud)

我试图得到这样的结果:

1 = can
2 = selin
4 = burak
5 = ertu
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

import java.util.*;

public class mapTers {

    public static void main(String[] args) {

        HashMap<String, Integer> map = new HashMap<String, Integer>();

        map.put("ertu", 5);
        map.put("burak", 4);
        map.put("selin", 2);
        map.put("can", 1);

        Integer dizi[] = new Integer[map.size()];

        Set anahtarlar = map.keySet();

        Iterator t = anahtarlar.iterator();

        int a = 0;

        while (t.hasNext()) {
            dizi[a] = map.get(t.next());
            a++;
        }

        Arrays.sort(dizi);

        for (int i = 0; i < map.size(); i++) {
            while (t.hasNext()) {
                if (dizi[i].equals(map.get(t.next()))) {
                    System.out.println(dizi[i] + " = " + t.next());
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 1

每次调用 t.next() 时,迭代器的指针都会向前移动。最终,迭代器到达末尾。您需要重置迭代器。另外,调用 t.next() 两次会移动指针两次。

这是我的解决方案:

import java.util.*;
public class mapTers
{
  public static void main(String[] args)
  {
    HashMap<String, Integer> map = new HashMap<String, Integer>();
    map.put("ertu", 5);
    map.put("burak", 4);
    map.put("selin", 2);
    map.put("can", 1);
    Integer dizi[] = new Integer[map.size()];
    Set anahtarlar = map.keySet();
    Iterator t = anahtarlar.iterator();
    int a = 0;
    while (t.hasNext())
    {
      dizi[a] = map.get(t.next());
      a++;
    }
    Arrays.sort(dizi);
    for (int i = 0; i < map.size(); i++) 
    {
      t = anahtarlar.iterator();
      while (t.hasNext())
      {
        String temp = (String)t.next();
        if (dizi[i].equals(map.get(temp)))
        {
          System.out.println(dizi[i] + " = " + temp);
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)