質問

Javaの Map List の両方のインターフェースを実装するクラスが存在するかどうか疑問に思っていました。

主に Map であるデータ構造を持っています。文字列(ID)を Image sにマップします。しかし、コードの特定の部分で、利用可能なすべてのID付き Images をユーザーに提示する必要があります。これを行う唯一の方法は、これを書くことです:

for (String id : myMap.keySet()) {
    // get the image like this "myMap.get(id)" 
}

したがって、 Map List の両方を実装するクラスがあると便利です。

for (Image img : myMap) {
  // the image is img
}

このような実装を知っている人はいますか

編集:回答(すべて正しい、投票済み)を表示した後、マップを並べ替える必要があることに気付きました。 「ソート済み」と言うとき、私が意味するのは、特定の順序で値を持たせたい、つまり変更できるようにするということだけです。これは元の質問ではないことは知っていますが、私はそれが必要であることに気付きました。

編集2 :私は優柔不断です。必要なのは、並べ替えられた地図ではなく、順序付けられた地図です。混乱してすみません、人々。

役に立ちましたか?

解決

特定の順序でアイテムが必要な場合は、 LinkedHashMap はあなたの友達です-アイテムを挿入順に保持します。 TreeMapは、指定したComparatorまたはキーのcompareToメソッドで定義された順序でアイテムを保持します。

他のヒント

順序付けられたマップについては、 LinkedHashMap 。これにより、キーが挿入順に保持されます。

SortedMap は、キーをソートされた順序に保ちます。 ( TreeMap は最も一般的な実装です。)

使用できるのは map.entrySet()です。これにより、MapEntriesのセットを反復処理できます。

javadoc もう少し詳しく。

すでに実用的な答えがたくさんあります。しかし、質問に直接答える...

  

JavaでMapインターフェイスとListインターフェイスの両方を実装するクラスが存在する場合、私はさまよいました。

...それは単純に不可能であることを言及する価値があります。 remove(Object)メソッドが障害です。

Map インターフェースの署名は次のとおりです。

V remove(Object key);

そして List インターフェースでは:

boolean remove(Object o);

< code> Map.values() メソッド。 Collection を返します。

これにより、保存された値のコレクションが得られます

myMap.values()

これを試してください:

for (Image img : myMap.values()) {
    // the image is img
}

ソートされたマップについては、 javaをご覧ください。 .util.SortedMap の実装。 java.util.TreeMap が最も頻繁に選択されます。保証された反復順序が必要な場合は、 java.util.LinkedHashMap 。エレメントをマップするのと同じ順序で反復を提供します。または、オプションで、最後にアクセスした順序で。キーを(一度追加したら)マップの最後に移動したい場合は、明示的に削除して再配置する必要があります。

TreeMap を使用できますキーの自然な順序に従って、またはマップ作成時に提供されるコンパレータによってソートされます。

TreeMap<String, Image> mapByName = new TreeMap<String, Image>(new ByNameComparator());

ByNameComparator()はコンパレータです。または、values()メソッドを使用して、Collections.sort()を使用してソートすることもできます。

Collection<Image> images = mapByName.values();
Collections.sort(images, new BySizeComparator());
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top