1
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;

public class A
{
    private Set<String> users = new HashSet<String>();

    public Set<String> getUsers()
    {
        return users;
    }

    public void setUsers( Set<String> users )
    {
        this.users.clear();
        if( users != null )
        {
            this.users.addAll( users );
        }
    }

    public static void main( String[] args )
    {
        A a = new A();
        Set<String> temp = new HashSet<String>();
        temp.add( "a1" );
        temp.add( "a2" );
        a.setUsers( temp );
        Set<String> previousUsers = a.getUsers();
        System.out.println( previousUsers.size() ); //output 2

        temp.add( "a3" );
        a.setUsers( temp );
        System.out.println( previousUsers.size() );//output 3, how to make it still 2?
    }
}

質問:previuosUsers新しいsetUsersが呼び出された後も古い値を保持したい場合、このプログラムをどのように変更する必要がありますか?

4

4 に答える 4

0

試す:

public Set<String> getUsers()
{
    return (Set<String>)users.clone();
}

previuosUsersが必要な場合は、新しいsetUsersが呼び出された後も古い値を保持します。

これは、内部で変更されたコレクションが、setUsersで示されているものと同じであってはならないことを意味しpreviousUsersます。したがって、getUsers同じコレクションへの参照ではなく、コレクションのコピーを返します。それがクローンが行うことです。

于 2012-11-13T06:28:12.190 に答える
0

public HashSet(Collection<? extends E> c)にリターンを直接割り当てるのではなく、代わりにこのコンストラクターを使用できますpreviousUsers

于 2012-11-13T06:30:01.580 に答える
0
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;

public class A
{
    private Set<String> users = new HashSet<String>(), prevUsers = new HashSet<String>();    
    public Set<String> getUsers()
    {
        return users;
    }

    public void setUsers( Set<String> users )
    {
        this.prevUsers = new HashSet<String>(users); // saves a copy of users in prevUsers
        this.users.clear();
        if( users != null )
        {
            this.users.addAll( users );
        }
    }
    public Set<String> getPrevUsers() { 
        return this.prevUsers; 

    }
    public static void main( String[] args )
    {
        Set<String> previousUsers = a.getPreviousUsers();
        System.out.println( previousUsers.size() ); //output 2

        temp.add( "a3" );
        a.setUsers( temp );
        System.out.println( a.getPreviousUsers.size() );//output 3, how to make it still 2?
    }
}
于 2012-11-13T06:32:54.653 に答える
0

これはあなたが期待していることですか

 public Set<String> getUsers()
{
    Set<String> users1 =  new HashSet<String>();
    users1.addAll(users);
    return users1;
}

public void setUsers( Set<String> users )
{
    this.users = users;

}
于 2012-11-13T06:33:04.937 に答える