-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 に答える
4

への呼び出しをArrays.sort(array)Arrays.sort(array, Comparator )に置き換えます

「1」の前に「0」をソートする独自のカスタム コンパレータを作成する必要があります。

于 2013-05-28T18:53:45.423 に答える
1

辞書式の値 (現在ソートしている値) でソートしない場合は、文字列の数値 ("one" == 1 など) でソートするカスタム コンパレータを作成する必要があります。

Java にはこのような機能が組み込まれていないため、少しコーディングする必要があります。easist は、数値を返す文字列のスイッチになります。

于 2013-05-28T18:54:20.000 に答える