うむ。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インタフェースの変数に変える必要はない)。
お礼
ありがとうございました。 TreeMapにして再チャレンジしてみようと思います。