-8

我有一个

HashMap<String, Integer>. 

我想提取所有的键,即字符串到一个字符串数组中。然后,我想对这个 String 数组进行排序并使用它。

不幸的是,字符串数组没有排序并产生我想要的输出。

当前输出为 -

one, 
two, 
zero,

需要的输出是 -

zero, 
one, 
two,  

代码如下 -

import java.util.Arrays;
import java.util.HashMap;
import java.util.Set;


public class HashMapKeySorter {

    public static String[] convert(HashMap<String, Integer> codes){

        Set set = codes.keySet();
        Object[] object = set.toArray();
        String[] allKeys = new String[object.length];

        for(int i = 0; i < object.length; i++){
            allKeys[i] = (String) object[i];

        }

        Arrays.sort(allKeys);
        return allKeys;

    }


    public static void main(String[]args){

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

         hm.put("zero", 0);

         hm.put("one", 1);

         hm.put("two", 2);

         String[] allKeys = convert(hm);
         showStringArray(allKeys);

    }


    public static void showStringArray(String[] allKeys){

        for(int i = 0; i < allKeys.length; i++){

            System.out.println(allKeys[i] + ", ");

        }

    }

}
4

4 回答 4

10

你接近它是错误的。你想要的是:

1)entrySet()Map.

2) 按条目对条目进行排序value

3)打印key每个排序条目的

您的程序所做的是key按字母顺序对 s 进行排序。它做得很好。

于 2013-05-28T18:55:55.750 回答
5

您需要一个自定义比较器:

Arrays.sort(allKeys, new Comparator<String>()
{
    @Override
    public int compare(String o1, String o2)
    {
        // the implementation of the comparator
    }
});
于 2013-05-28T18:54:10.367 回答
4

Arrays.sort(array)用 Arrays.sort(array, Comparator )替换您的调用

您必须编写自己的自定义比较器,将“零”排序在“一”之前。

于 2013-05-28T18:53:45.423 回答
1

如果您不想按字典值排序(这是您当前正在排序的值),那么您将需要制作一个自定义比较器,该比较器将按字符串的数值排序(如“one”== 1)。

Java没有内置这样的东西,所以你需要做一些编码,easyist将是一个返回数字的字符串上的开关。

于 2013-05-28T18:54:20.000 回答