0

以下に定義されている3つのデータベーステーブルがあります。列名は括弧内に示されています。

Product (ProductID, Price, Last_Updated)

User (UserID, Name, Address, LocationID, Last_Updated)

Location (LocationID, Loc_Name, Last_Updated)

Java(JDK 1.5)を使用して、すべてのテーブルのすべての列名を1つのコレクションに。のように追加したいと思いますHashMap

私の問題は、重複するキーが入力されると、前の値が上書きされることです。

私はそれらを次のように追加しています:

Map<String, String> map = new HashMap<String, String>();

map.add("ProductID", "Save the Product ID");
// ...
map.add("Last_Updated", "Save Last_Updated of Product table");
// ...
map.add("LocationID", "Save the LocationID");
// ...
map.add("Last_Updated", "Save Last_Updated of User table.");

これで、キーLast_Updatedが新しい値で上書きされますSave Last_Updated of User table.

しかし、私は両方の値が必要です。

HashMap複数の構造を使用せずにこれを実装する方法はありますか?

4

5 に答える 5

2

同じキーでアイテムを追加したい場合、これは可能な解決策になります

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

要素を追加する場合:

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

また、要素にアクセスする場合は、mapsget()関数によって、キーの値である文字列のリストを取得します。

ただし、マルチマップ実装を使用するのが最善です。

グアバ:

Multimap-具体的な実装はjavadocで確認できます。

Multimap<String, String> map = ArrayListMultimap.create();
map.put("a", "Apple");
map.put("a", "Almonds");
Collection<String> valuesForA = map.get("a"); // List of ("Apple", "Almonds")

Apache Commons

MultiMap-javadocの例と具体的な実装

于 2012-08-08T12:18:04.003 に答える
1

列名のプレフィックスとしてテーブル名を追加します。次に、「Product.Last_Updated」、「User.Last_Updated」、「Location.Last_Updated」を分離できます。
明らかに、テーブルまたは列の名前で使用されていない区切り文字を使用する必要があります。'。' する必要があります。

于 2012-08-08T12:12:53.030 に答える
1

JDK 5に制限されているが、ライブラリの使用が許可されている場合は、公開されているMultiMapsを確認してください。CommonsCollectionsと同様に、Guava1つあります。

于 2012-08-08T12:21:02.040 に答える
0

H2やHSQLなどのインメモリデータベース内の非正規化テーブルを使用してみませんか。

于 2012-08-08T12:15:55.740 に答える
0

セパレータを使用します。パイプ記号(|)またはドット(。)のように

于 2012-08-08T12:45:33.110 に答える