dポイントプレゼントキャンペーン実施中!

JavaでHashMapについて質問です。

public map remove(key);
これだとキーを指定して、要素を削除しますが、
キーを指定せず、要素のみ(例えば要素がnullの場合全て)を指定してキー、要素の削除する方法はありますか?

キーの設置数が多く、要素がnullの多くて要素nullを一括して表示させたく無いので質問しました。

宜しくお願いします。

A 回答 (2件)

class Q5354339{


public static void main(String[] args){
java.util.HashMap<Integer,Integer> hm = new java.util.HashMap<Integer,Integer>();
hm.put(1,2);
hm.put(2,3);
hm.put(3,2);
hm.put(4,2);
hm.put(5,5);
java.util.ArrayList<Integer> ci = new java.util.ArrayList<Integer>();
ci.add(2);
/*
マニュアル参照。valuesで戻ったCollectionをいじるとHashMapも影響する。
Collectionのイテレーション中にHashMapいじったときは挙動undefined
*/
hm.values().removeAll(ci);
for(int i:hm.keySet()){
System.out.println(i); /* 2,5 */
}
}
}
    • good
    • 0
この回答へのお礼

回答お礼の返事遅くなりました。
ありがとうございます。

お礼日時:2009/10/19 13:10

HashMapのentry数が過大でnull entry数が多いようでしたら、


HashMap(int initialCapacity)でinitialCapacity としてより小さい値を指定する必要があります。
array sizeと同様にHashMap capacity分だけentryは設けられており、null-entryのdeleteをしようとしても、結果はnop-returnとなり意味がないようです。
(arrayの場合は前に詰めることもできますが、HashMapはkey-valueに対応した場所が計算で決められ、詰めることは出来ません)
eclipseなどのdebuggerでnull entryが表示されるのは仕方ありません。
printルーチン等で自分で出力するのであれば、null-entryは表示しないようにすれば良いと思います。
    • good
    • 0
この回答へのお礼

回答遅くなりました。
ありがとうございます。

お礼日時:2009/10/19 13:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!