2

から要素を削除したいのですがHashTable、これに使用hashTable.remove()しますが、取得できません

Hashtable<Integer,String> players = new Hashtable<Integer,String>();

        players.put(1, "Sachin Tendulkar");
        players.put(2, "Rahul Dravid");
        players.put(3, "Virat Kohli");
        players.put(4, "Rohit Sharma");

        Enumeration<String> enumration = players.elements();

        while(enumration.hasMoreElements()){
            String elmnt = enumration.nextElement();
            System.out.println(elmnt);
            if(elmnt.startsWith("R")){
                players.remove(elmnt);
                System.out.println(elmnt+"::Contains R");
            }

        }

        System.out.println(players);

私が得る出力は次のとおりです。

Rohit Sharma
Rohit Sharma::Contains R
Virat Kohli
Rahul Dravid
Rahul Dravid::Contains R
Sachin Tendulkar
{4=Rohit Sharma, 3=Virat Kohli, 2=Rahul Dravid, 1=Sachin Tendulkar}
4

8 に答える 8

1
    for(Iterator<Map.Entry<Integer, String>> iter =  players.entrySet().iterator(); iter.hasNext(); ) {
        Map.Entry<Integer, String> e = iter.next();
        if(e.getValue().startsWith("R")) {
            iter.remove();
        }
    }
于 2013-10-30T06:45:28.343 に答える
1

ではなくメソッドに追加keyしてください。remove()value

    Hashtable<String, Integer> h = new Hashtable<String, Integer>();
    h.put("n1", 30);
    h.put("n2", 30);
    h.remove("n1"); //here we are giving "n1" which is key of the hashTable 
于 2013-10-30T06:44:47.870 に答える
1

remove from にkey引数として渡す必要があります。hashTable.remove()HashTable

参考:ハッシュテーブルから削除

ハッシュ テーブルからエントリを削除する最良の方法。 これはあなたに役立つかもしれません、それを見てください。

于 2013-10-30T06:48:45.927 に答える
1

列挙から削除しないでください。

Javadoc :

「したがって、同時変更に直面すると、イテレータは、将来の不確定な時点で恣意的で非決定論的な動作を危険にさらすのではなく、迅速かつ明確に失敗します。ハッシュテーブルのキーと要素のメソッドによって返される列挙は、フェイルファストではありません。」

iteratorを使用する必要があります:

import java.util.Hashtable;
import java.util.Iterator;


public class Test {
    public static void main(String[] args) {
        Hashtable<Integer,String> players = new Hashtable<Integer,String>();

        players.put(1, "Sachin Tendulkar");
        players.put(2, "Rahul Dravid");
        players.put(3, "Virat Kohli");
        players.put(4, "Rohit Sharma");

       Iterator<Integer> iterators = players.keySet().iterator();
       while(iterators.hasNext()) {
           int key = iterators.next();
           if(players.get(key).startsWith("R")) {
               iterators.remove();
           }
       }

        System.out.println(players);
    }
}
于 2013-10-30T06:49:20.317 に答える
0

players.remove(elmnt);メソッドは、キーのエントリを削除しようとしelmtます。しかし、あなたはvalueHashtable代わりにを渡しkeyました。

于 2013-10-30T06:45:32.503 に答える
0

ハッシュ テーブルから要素を削除するためのコーディングの構文は次のとおりです。

public virtual void Remove( オブジェクトキー )

相互ハッシュ テーブルは、hash ref と hash remove で操作できます。複数のスレッドによって同時に処理され、操作は必要に応じてテーブル固有のセマフォによって保護されます。一方、レコードの削除は、後の検索を妨げてはなりません。つまり、検索プロセスは、プローブ シーケンスがこのスロットを通過したレコードに到達するために、新しく空になったスロットを通過する必要があります。

于 2013-10-30T06:57:29.503 に答える
0

players.keySet()の代わりにキーを取得するために使用しますplayers.elements()

于 2013-10-30T06:50:15.023 に答える