Java 如何封装集合?
问题:如果我希望在调用新的setUsers后,PreviuUsers仍保留旧值,我应该如何修改此程序?尝试:Java 如何封装集合?,java,Java,问题:如果我希望在调用新的setUsers后,PreviuUsers仍保留旧值,我应该如何修改此程序?尝试: 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> getU
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?
}
}
如果我想让Previouser在调用新的setUsers后仍保留旧值
这意味着在setUsers中修改的集合不能与以前的用户所指向的集合相同。因此,在getUsers中,返回集合的副本,而不是对同一集合的引用。这就是它的作用。您可以使用此构造函数,而不仅仅是直接将返回分配给以前的用户。这是您期望的吗
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?
}
}
这是你的作业吗?如果是,请先自己尝试一下。提示:-不要清除您的设置。只是在末尾追加。接口是setUsers,而不是addUsers,追加可能不起作用。我不认为Set有方法cloneclone是java.lang.Object的方法,所以java中的每个对象都继承它。
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?
}
}
public Set<String> getUsers()
{
Set<String> users1 = new HashSet<String>();
users1.addAll(users);
return users1;
}
public void setUsers( Set<String> users )
{
this.users = users;
}