
HashMap で以下の様にコーディングしました。
当然 map の中には19個のオブジェクトが存在するはずですが、何故か15個しかありません。どなたか原因を御存知でしょうか?
HashMap map = new HashMap();
map.put("key1", new Integer(1));
.
(2->8)省略
.
map.put("key9", new Integer(9));
map.put("key10", new String("10"));
.
(11->18)省略
.
map.put("key19", new String("19"));
以下エクリプスのデバッガで取得したもの。
ECLIPSE 2.1.3 / JDK 1.4.2.03
map= HashMap (id=21)
entrySet= HashMap$EntrySet (id=50)
keySet= null
loadFactor= 0.75
modCount= 19
size= 19
table= HashMap$Entry[32] (id=26)
[0]= null
[1]= HashMap$Entry (id=28)
[2]= HashMap$Entry (id=31)
[3]= null
[4]= null
[5]= null
[6]= null
[7]= null
[8]= null
[9]= HashMap$Entry (id=32)
[10]= HashMap$Entry (id=33)
[11]= null
[12]= null
[13]= HashMap$Entry (id=34)
[14]= HashMap$Entry (id=35)
[15]= HashMap$Entry (id=36)
[16]= HashMap$Entry (id=37)
[17]= null
[18]= null
[19]= null
[20]= HashMap$Entry (id=38)
[21]= null
[22]= null
[23]= HashMap$Entry (id=39)
[24]= HashMap$Entry (id=40)
[25]= null
[26]= HashMap$Entry (id=41)
[27]= HashMap$Entry (id=42)
[28]= null
[29]= HashMap$Entry (id=43)
[30]= HashMap$Entry (id=44)
[31]= null
threshold= 24
values= null
No.1ベストアンサー
- 回答日時:
詳しく調べてないので、想像なんですが…
HashMapというコンテナは、
ハッシュという手法で、データを保管します。
これはどういうことかというと、
(詳しくはアルゴリズムの本を見てほしいのですが)
データを、いくつかに分類して入れるのです。
たとえば「SpiralGalaxyさんは12文字だから、番号12のところに保存」
というふうに。(実際には番号付けはもっと複雑ですが)
しかし、このようにすると、
同じ番号のところに複数のデータが入ることがあります。
そういう場合、いくつかのデータを列にして保存します。
図にするとこんな感じ。
◇-●-●-●
◇-
◇-●-●
◇-
...
◇-●
◇-●-●-●
◇が番号のところで、●がデータです。
特定の番号には、データは無かったり、複数あったりします。
この場合の$Entryというのも、こういうものだと思います。
複数データを持っている番号があるので、
データの数とその数が合わないのでしょう。
実際に、HashMapからデータを取り出す作業をしてみてください。
おそらく入れた数だけ取り出せると思います。
(そうでなかった場合は補足に書いてください)
参考URL:http://www.amazon.co.jp/exec/obidos/ASIN/4797304 …
Oracleに接続してデータを選択し選択レコードの項目タイプに応じて取り出し HashMap に結果として保存するクラスを書いていたんですが、ある項目が NULL 値となるため、質問文のようなソースを書いて確認しました。その時点で個数が合わないのでおかしいと思い質問した次第です。
実際上記ソースでも、ちゃんと取り出せました。確認もせず質問してしまい冷や汗ものです(^^;
NULL値となるのは SQL文他別の原因でした。
デバッガでさらに確認したところ
1個しか入らないと「思い込んで」いた配列の一つの要素に以下の様に3つ入っていました。
ありがとうございました。参考になりました。
[1]= HashMap$Entry (id=28)
hash= -820427199
key= "key18" <------------------
count= 5
hash= 101943494
offset= 0
value= char[5] (id=54)
next= HashMap$Entry (id=52)
hash= 1493777409
key= "key4" <------------------
next= HashMap$Entry (id=56)
hash= -819273471
key= "key13" <------------------
next= null
value= "13"
value= Integer (id=57)
value= "18"
No.3
- 回答日時:
エクリプスを使っているのであれば、
デバッグモードで実行して、
ブレイクポイントで止めた後、
表示ペインからHashMapの中身を
コンソールに出力するコードを書いて実行することで確認できそうです。
釈迦に説法かもしれなかったですが。
以上
御回答ありがとうございます。
>釈迦に説法かもしれなかったですが。
恐縮します。(^^;
この辺で締め切りとさせていただきます。皆様ありがとうございました。勉強になりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ORA-01858: 数値を指定する箇所...
-
BOOL値を逆にしたい
-
jsp/Servletの動的に増えるフォ...
-
Stringを返す getText()メソッ...
-
C言語のポインターに関する警告
-
System.err. printlnとSystem.o...
-
JSPやサーブレットでSystem.out...
-
JavaScriptの変数をjavaのメソ...
-
Formの値が変更されたかどうか...
-
javaです
-
オブジェクトの中のプロパティ...
-
VBSエラー"オブジェクト型の変...
-
C# DataGridView列カスタマイズ
-
IF関数でEmpty値を設定する方法。
-
C#でのWNetAddConnection3の使...
-
変数を動的に作るには?
-
コマンドプロンプトに不正な文...
-
matchesを否定文として使う方法...
-
POIでExcelに時刻(h:mm)の値を...
-
java 入力 3 4 3 出力 ABC DEFG...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ORA-01858: 数値を指定する箇所...
-
BOOL値を逆にしたい
-
getStringの値がNULLの時の処理
-
C# ListBoxのインデックスの値...
-
javaの掲示板について
-
配列にnullを代入すると、null...
-
eclipseでoracle接続時のエラー...
-
gas カレンダー祭日設定でエラー
-
例外でBeanUtils.populateが、...
-
jsp/Servletの動的に増えるフォ...
-
日付をyyyyMMddで取得したい。
-
Javascript エラーメッセージが...
-
Tomcatを再起動するとエラーが...
-
onbeforeunloadでnullを返すとI...
-
Java配列でNullPointerExceptio...
-
postgresql接続時
-
空欄のテキストフィールドの判...
-
HashMapがおかしい
-
Stringを返す getText()メソッ...
-
JSPによる画面間のパラメータの...
おすすめ情報