- PR -

Hashtable使用時のKey重複について

1
投稿者投稿内容
しん
常連さん
会議室デビュー日: 2004/04/04
投稿数: 48
投稿日時: 2008-06-14 22:50
Hashtable使用時に下記サンプルのようにKey名"a"で重複させると
後に登録したデータで上書きされます。
従って、has.get("a") で取得できる結果は "桃" となり
has.size()の結果も"1" となります。
そこで質問なのですがkeyの重複を許しているようなクラスなんて
あるのでしょうか?Linkedhashmapなんかはputした順番でgetできる
ので使えるかと思ったのですが試してみたところやはりKeyの重複は
許されていませんでした。
なぜこんな質問をするかというと当方、どなたかが過去に作ったあるアプリを
デバッグしておりそのバグの原因がHashtableオブジェクトに同じKey名でput
していたためでした。
アプリの仕様上同じKey名でputせざるえないので半角スペースでもKey名の
後ろに付加するようにして区別しようかと思ったのですが
そんなことする前にKey名の重複を許すクラスなんてあればと思いましたので
質問いたしました。
よろしくお願いいたします。

コード:
public class test {
    public static void main(String args[]) {
        Hashtable has = new Hashtable();

        has.put("a","りんご");
        has.put("a","バナナ");
        has.put("a","桃");
    }
}

わたなべ
大ベテラン
会議室デビュー日: 2007/12/09
投稿数: 123
お住まい・勤務地: 札幌
投稿日時: 2008-06-15 00:45
keyというくらいなので、重複されちゃ困ります。
keyの重複を許しているMapがあったとしたらけんたさんは嬉しいかもしれませんが、全世界のJava開発者が発狂しますね。

アプリの仕様はよく解りませんが、Hashtableを使うこと自体が間違いなんでしょう。
もしくはアプリの仕様が破綻していると思われます。

keyで複数の値の一覧を持ちたい場合は、Mapの値としてListやSetを用いるのが一般的です。
権兵衛
ベテラン
会議室デビュー日: 2002/09/24
投稿数: 50
投稿日時: 2008-06-15 02:15
重複値が取れたとして、どっちが本来の目的の値だと判断する気なんでしょうか?
fumokmm
会議室デビュー日: 2008/08/30
投稿数: 1
投稿日時: 2008-08-30 11:14
http://blog.pasonatech.co.jp/sugiura/7159.html

ここで紹介されているMultiMapが、けんたさんが欲しがっている
機能ではないでしょうか。
(ApacheのCommons APIです)

MultiMapのAPI
http://commons.apache.org/collections/api-3.2/org/apache/commons/collections/MultiMap.html
1

スキルアップ/キャリアアップ(JOB@IT)