1

ハッシュテーブルのデータが同じキーに対して上書きされています。同じキーに対して異なる間隔で「n」個のデータを追加しようとしています。ハッシュテーブルに追加されたデータが上書きされています。この問題を解決するにはどうすればよいですか?

if (value == RepeatRule.DAILY) {

                            setHashRepeatData(repDates, eventBean,
                                    listRepeatEvents);

                        }
                        if (value == RepeatRule.WEEKLY) {

                            setHashRepeatData(repDates, eventBean,
                                    listWeekEvents);
                        }

private void setHashRepeatData(Vector repDates, EventData eventBean,
            Vector listOfRepeatData) {

        if (repDates != null) {
            System.out.println("the size of repDates is :" + repDates.size());
            System.out.println("summ" + eventBean.getSummary());
            listOfRepeatData.addElement(eventBean);
            for (int i = 0; i < repDates.size(); i++) {
                String currentRepDate = (String) repDates.elementAt(i);
                System.out.println("currentRepDate" + currentRepDate);

                listUserEvents.put(currentRepDate, listOfRepeatData);

            }
        }

    }

上記のメソッドをさまざまな間隔で呼び出して、同じキーのデータを設定しようとしています。問題を解決する方法がわかりません。

4

2 に答える 2

1

マルチバリュー マップを探しています (同じキーに対して、複数の値を持つことができます)。

これを自分で実装するか ( to を変更Map<K,V>してMap<K,List<V>>)、作成者にとっては少し面倒です。

または、その機能を提供する Guava を使用します:マルチマップ(このアプローチをお勧めします)

于 2012-05-16T09:27:52.883 に答える
0

これは、自分で行う場合、達成したいことのサンプル実装になります。

// I took a set because I wanted have the inputs sorted
HashMap<String, Set<String>> var = new HashMap<String, Set<String>>();

String key= "key";
String value = "value";

if(var.containsKey(key)){
// the set is already there we can proceed to add the value
} else {
    //first time you have to create the List
    var.put(key, new TreeSet<String>());
}
var.get(key).add(value);

次のように、ケースに応じて変更する必要があります。

HashMap<String, Vector<String>> var = new HashMap<String, Vector<String>>();

String key= "key";
String value = "value";

if(var.containsKey(key)){
// the set is already there we can proceed to add the value
} else {
    //first time you have to create the List
    var.put(key, new Vector<String>());
}
var.get(key).addElement(value);
于 2012-05-16T09:47:16.493 に答える