我想问一个问题,我如何更新数组列表对象中的记录:
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)然后使用新值删除或更新它。
提前致谢。
答案 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); //添加到列表末尾