2017-03-06 4 views
1

からオブジェクトを削除します。オブジェクト1は、は、だから私は、次の関連するコードを持っているTreeSetの

removingobject1 

のように設定されています。

はまだ、私はこのようにforループを使用して、その後セット全体をプリントアウトするとき:

for (Object o: set){ 
     System.out.println(o); 
    } 

をそれはまだオブジェクト1を含む全セットを出力します。 Javaが認識できる以前のコレクションではっきりとしていましたが、set.remove(o)を呼び出すと、まったく何も得られませんでした。

編集:私は可能な限り一般として疑問を維持しようとしたが、ここで私が使用しているオブジェクトです:

public class Player implements Comparable<Player>{ 

public String firstname; 
public String lastname; 
public int value; 
public Position position; 



public Player(String firstname, String lastname, int value, Position position){ 
this.firstname = firstname; 
this.lastname = lastname; 
this.value = value; 
this.position = position; 

} 

public String toString(){ 
    return(firstname + " " + lastname") 
} 


public int compareTo(Player player){ 
    if (this.value > player.value){ 
     return -1; 
    } else { 
     return 1; 
    } 
} 
+1

あなたのオブジェクトは 'hashCode()'を実装していますか? [mcve]を投稿してください。 – shmosel

+1

あなたのセットとオブジェクトの操作を示すコードを表示してください。どのようにオブジェクトを作成するのですか?hashCode()をどのように実装するのですか?どのようにそれらをセットに追加しますか? –

+0

オブジェクトクラスを使用していますが、プロパティも設定していますか?ここにコードを貼り付けると、私たちがあなたを手助けするのは簡単でしょう。 – Maverick

答えて

1

をあなたのremoveメソッドは次のようになります。

public static void remove(Object object){ 
    set.remove(o); 
} 

方法は、 remove要素がセット内にあればそれを削除し、削除されていればtrueを返します。あなたは、反復(docs)中にセットを変更してはなりません。このクラスのiteratorメソッドによって返さ

イテレータはフェイルファストされています セットは いずれかで、イテレータが作成された後の任意の時点で変更された場合iterator は、イテレータの独自のremoveメソッドを除いて、ConcurrentModificationExceptionをスローします。したがって、 の同時変更では、イテレータは、 未定義の時刻に任意の非決定的な動作を未然に防ぐのではなく、迅速かつきれいに失敗します( )。

+0

これは本当ですが、質問には答えません。そして私は反復が要素がセットにあることを証明することだけだったと思う。 – shmosel

+1

この場合、1つの要素が削除され、反復子が失敗するようにmodCount値が変更されるため、ConcurrentModificationExceptionがスローされます。 –

+0

私は実際にこの方法で試してみて、何とかそれはうまくいかなかった。私はforループを実装して、Javaがオブジェクトがまだセットに入っていることを認識しているかどうかを確認します。もしremove(o)が実際に自然に働くなら、私は不要なforループを削除します。 ;) –

関連する問題