• ベストアンサー

java のMAPをソートするとき

以下のプログラムがあったとします、 Map<Integer, String> map = new HashMap<Integer, String>(); map.put( 0 , "abc" ); map.put( 4 , "efg" ); map.put( 1 , "hij" ); map.put( 3 , "klm" ); map.put( 2 , "npo" ); これで、mapのキーをソートするにはどうしたらいいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.2

うむ。Map<?,?>自体にはその機能は無いのだよ。 ではどうするかというと、Map<?,?>とHashMap<?,?>の変わりにSortedMap<?,?>とTreeMap<?,?>を使うのだ。質問文のそれに対して具体的に言うとHashMapをTreeMapに変えるだけでいい(理由はキーがIntergerだから)。 java.util.Map<Integer, String> map = new java.util.TreeMap<Integer, String>(); map.put( 0 , "abc" ); map.put( 4 , "efg" ); map.put( 1 , "hij" ); map.put( 3 , "klm" ); map.put( 2 , "npo" ); MapインターフェースとHashMapクラスは、キーバリューをペアを保持するためのクラスであり、各エントリーに順序は無いという考えのものだ。それに対し、SortedMapインターフェースとTreeMapクラスは各エントリー間の重み付け(優先順位)を設定する機能を追加で提供しており、IntegerやStringがキーである場合は適切な順序で並び替えてくれる。自作のクラスをキーにする場合はComparableインタフェースを実装して2つのインスタンス間でどっちが前かを判定するルーチンを用意してやれば良い。 で、質問文の短いプログラムでは、mapはMap型の変数なんだけど、そこに実際に入っているインスタンスがTreeMapだときちんと並び替えをしてくれるのでMapインタフェースとTreeMapクラスでも良いのだ(mapをSortedMapインタフェースの変数に変える必要はない)。

nakisan2011_12
質問者

お礼

ありがとうございました。 TreeMapにして再チャレンジしてみようと思います。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

なぜHashMap? TreeMapではだめなの?

nakisan2011_12
質問者

お礼

TreeMAPに変更してやってみることにしました!ありがとうございました。

すると、全ての回答が全文表示されます。
QL-820NWBでWindows無線印刷できない
このQ&Aのポイント
  • QL-820NWBの無線LANの設定はできたが、印刷する際の出力先がUSBとなり、プリンターに届かない状況に困っています。
  • 環境はWindowsで、無線LANで接続しています。
  • 関連するソフト・アプリは特にありません。
回答を見る

専門家に質問してみよう