• ベストアンサー

HashMapで要素を指定から削除

JavaでHashMapについて質問です。 public map remove(key); これだとキーを指定して、要素を削除しますが、 キーを指定せず、要素のみ(例えば要素がnullの場合全て)を指定してキー、要素の削除する方法はありますか? キーの設置数が多く、要素がnullの多くて要素nullを一括して表示させたく無いので質問しました。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

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 */ } } }

marugori
質問者

お礼

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

その他の回答 (1)

  • ninoue
  • ベストアンサー率52% (1288/2437)
回答No.2

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は表示しないようにすれば良いと思います。

marugori
質問者

お礼

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

関連するQ&A