更新数组列表java中的特定对象项

时间:2015-10-07 13:29:36

标签: java arrays

我想问一个问题,我如何更新数组列表对象中的记录:

e.g:

List<User> userList = new ArrayList<User>();

User user = new User();
user.setUserId(1);
user.setUsername("user1");
userList.add(user);

User user = new User();
user.setUserId(2);
user.setUsername("user2");
userList.add(user);

User user = new User();
user.setUserId(3);
user.setUsername("user3");
userList.add(user);

现在我想更新数组列表中的特定记录,假设我想更新用户ID#2的用户名 e.g:

User user = new User();
user.setUserId(2);
user.setUsername("new_username2");

//before i want to remove or update the record on the list which contain user id #2
userList.add(user);

我希望从列表中搜索userList.contains(2)然后使用新值删除或更新它。

提前致谢。

5 个答案:

答案 0 :(得分:6)

如果您知道元素的位置,请执行以下操作:

userList.get(index).setUsername("newvalue");

如果没有,则需要循环所有元素以找到要更新的元素

for (User user : userList) {
    if (user.getUserId().equals(searchedId)) {
        user.setUsername("newvalue");
        break;  
    }
}

答案 1 :(得分:3)

在你的情况下,我认为最好使用Map而不是List:

Map<Integer, User> userMap = new HashMap<Integer, User>();

User user = new User();
user.setUserId(1);
user.setUsername("user1");
userMap.put(user.getUserId(), user);

user = new User();
user.setUserId(2);
user.setUsername("user2");
userMap.put(user.getUserId(), user);

user = new User();
user.setUserId(3);
user.setUsername("user3");
userMap.put(user.getUserId(), user);

通过这种方式,您可以直接搜索所需的userId:

User userToModify = userMap.remove(idToModify);
userToModify.setUsername("new name");
userToModify.setUserId(54);
userMap.put(user.getUserId(), userToModify);

如果您只需要通过一个字段(在本例中为userId)查找对象,则Map的效率和易用性(以及维护)将更加高效。

答案 2 :(得分:2)

如果您只需要更新名称,则无需创建新对象并将其插入列表中。正如@Davide指出的那样,您可以遍历列表并设置用户名。

为了提高效率,我建议使用Hashtable<Integer, User> userTable而不是列表来阻止整个列表上的迭代找到合适的用户

通过这种方式,您可以通过其ID有效地为用户设置用户名,如下所示userTable.get(id).setUsername("new username")

答案 3 :(得分:1)

 for(User user : userList) {
    if(user.getId == 2) {
        user.setUsername("newUsername")
    }
}

答案 4 :(得分:0)

如果你想改变列表中K位置的对象的一些属性,如上所述,使用:

userList.get(k).setAttribute(someValue);

然而,如果你想用一个新的对象替换整个对象,使用 List 的 set() 方法:

userList.set(k, U); //其中U是一个新用户

另一种选择是删除项目并在其位置添加新项目:

userList.remove(k);
userList.add(k, U);

但是,如果项目 k 在删除之前是列表的最后一个元素,那么您需要执行以下操作:

userList.remove(k); userList.add(U); //添加到列表末尾