3

次の構造の複数値HashMapに値を追加しようとしています。

Map< Integer, List<Float> > map = new HashMap< Integer, List<Float> >();

私は実際に特定のアイテムへの参照を保持したかったので(たとえば、Androidのビューの情報)、のInteger値には一意のHashMapアイテムが含まれ、の値にはアイテムのX座標値が含まれます。ユーザーは画面上に多くのアイテムを表示できます。また、同じIDを持つアイテムを100個表示できるため、リストには各アイテムのX座標値が含まれます。IDListFloat

より明確にするために、私のHashMapには次のデータが含まれます

{1、{200、400.5、500.6 ...}}、ここで1はキーで、残りはID1のアイテムのフロート値です。

今、私は次のようにリスト値を追加します...

List<Float> list = new ArrayList<Float>();

list.add(x_coord_1);
list.add(x_coord_2);
list.add(x_coord_3)
map.put(1, list);

私が現在直面している問題は、新しいIDが作成されるたびに新しいリストをインスタンス化する方法を理解することです。

IDの数がわからないため、100個のアイテムに対して100個のリストを作成する必要があります。

この問題を解決するためのより良いアプローチはありますか...

また、特定のキーの特定の値をから削除する方法を見つけたかったのです。HashMap

4

2 に答える 2

9

これはどう :

public class multivalueHashmap {
    private Map< Integer, List<Float> > map = new HashMap< Integer, List<Float> >();

    public void add(Integer id, Float value){
        if(!map.containsKey(id)){
            map.put(id, new ArrayList<Float>());
        }
        map.get(id).add(value);
    }

    public void delete(Integer id, Float value){
        if(!map.containsKey(id)){
            return;
        }
        map.get(id).remove(value);
    }
}

このようにして、メソッドを使用してアイテムを簡単に追加および削除できます。

于 2012-04-08T13:58:16.500 に答える
2

GuavaMultimapを使用できます。

于 2012-04-08T14:51:54.483 に答える