0

セットでremoveが呼び出された場合、HashSetのcontainsAllメソッドの一貫性が維持されないのに対し、HashMapのcontainsValueメソッドは、値が削除された後も一貫性を維持します。 HashMapの場合と同様に、containsValueメソッドは正しい値を返します

public static void main(String[] args)
    {

    HashSet<String> lookup=new HashSet<String>();
    HashMap<Integer,String> findup=new HashMap<Integer,String>();

    String[] Alltokens={"This","is","a","programming","test","This","is","a","any","language"};
    for(String s:Alltokens)
        lookup.add(s);

    String[] tokens={"This","is","a"};
    Collection<String> tok=Arrays.asList(tokens);

    lookup.remove(Alltokens[5]); 
     if(lookup.containsAll(tok))
       System.out.print("found");
    else    
        System.out.print("NOT found");

    Integer i=0;
    for(String s:Alltokens)
        findup.put(i++,s);
    boolean found=true;
    findup.remove(Alltokens[0]);
        findup.remove(5);               //Edit : trying to remove value whose key is 5
    for(String s:tokens)
        if(!findup.containsValue(s))
            found=false;
    System.out.print("\nIn map " + found);
}

マップに出力が見つかりませんtrue

HashSetでremoveメソッドが呼び出された場合にcontainsAllの一貫性を維持する方法はありますか?また、セットに存在しなかった値がメソッドを削除するために渡された場合。ContainsAllは一貫性を保ちます

        lookup.remove("Alltokens[5]");
    if(lookup.containsAll(tok))

//これはtrueになりますが、すでに存在する値が削除された場合はfalseになります

HashMapsのキーで何かをしなければならず、HashSetのキーではないのかもしれませんが、それらがどのように機能するか説明していただけますか?

4

1 に答える 1

5

Map.remove(Object)キーに基づいてマッピングを削除します。

Integerキー()としてオブジェクトを使用するため、呼び出したときに何もput(i++, s)削除されません。戻り値をチェックして、が返されることを確認します。findup.remove(Alltokens[0])false

于 2012-11-12T07:55:55.113 に答える