我有一个静态Vector用户,每个用户都有一个或多个帐户,因此每个用户都有一个Vector帐户。用户和帐户具有唯一ID。 添加一个新用户很简单:我有一个静态Vector,我可以很容易地检查最后一个用户的ID,我可以获得新用户做id.getId()+ 1的新ID。
添加新用户后,添加新帐户会出现问题。帐户ID必须是唯一的,因此我必须检查每个用户的帐户向量中包含的最大ID。如果许多流程可以添加/删除用户和帐户,那么同步所有帐户向量并安全地添加/删除帐户的最佳方法是什么?
实际上,用户添加如下
public boolean addNewUser(User user)
{
if(user!=null)
{
int id=getNewUserId();
if(id!=-1)
{
user.setId(id);
utenti.add(user);
return false;
}
else
return false;
}
else
return false;
}
private int getNewUserId()
{
User user=utenti.lastElement();
if(user!=null)
return user.getId()+1;
else
return -1;
}
答案 0 :(得分:1)
关于id,我建议使用你一直增加的长值(无论帐号被删除)。
同步会更难,取决于你想做什么。 一个简单的规则是,如果你有一个列表对象,每当你访问它时(读或写)都使用一个synchronized块:
synchronized(myList) {
//update the list, do whatever you like, there is no concurrent modification
}
根据您的确切用法,可能有更好的方法,但这应该有效。
答案 1 :(得分:1)
可能不是最有效的方式,但您可以创建一个int,然后查看每个用户的每个帐户列表的大小。
int id = 0;
for (User user : AllUsers) {
id += user.listOfAccounts.size();
}
现在你的id将是最后一个id。只需在创建新帐户时添加1即可。
请注意,如果可以删除帐户,则会出现问题。