更改多维ArrayList的值

时间:2013-11-22 15:23:22

标签: java multidimensional-array arraylist

我需要一个解决方案来改变Java中多维ArrayList中元素的值。这是我的ArrayList:     公共类用户{

ArrayList<ValidateUser> personer = new ArrayList<ValidateUser>();

public Users() {
  personer.add(new ValidateUser("admin", "asdf123", 0.8, "admin"));
  personer.add(new ValidateUser("jesper", "ukamm19", 2.5, "user"));
  personer.add(new ValidateUser("lars", "lol123", 1.5, "user"));
}

例如,我想更改用户“admin”的双精度值(0.8)。 这可以从另一个班级完成。 怎么做?

提前致谢! :)

2 个答案:

答案 0 :(得分:1)

正如我在评论中所述,只需遍历列表即可找到对象。如果你要做很多事情,可以考虑使用地图。

for (ValidateUser user : personer)
    if (user.getName().equals("admin"))
        user.setNumber(someNumber);

答案 1 :(得分:1)

首先,请注意,这不是一个多维数组,只是一个包含ValidateUser类对象引用元素的列表。其次,您需要在更新之前访问该元素。您有几种方法可以实现此目的:

  1. equals课程中实施hashCodeValidateUser方法,然后从列表中检索对象:

    ValidateUser adminUser = personer.get(new ValidateUser("admin", "", 0.8, ""));
    adminUser.set...
    

    注意:这看起来很荒谬但会起作用(假设您的equals方法仅按保留此"admin"值的字段进行检查。

  2. 浏览数组并手动搜索所需元素,然后更新它:

    for (ValidateUser user : personer) {
        if ("admin".equals(user.getXxx()) {
            user.set...
            break; //don't forget this!
        }
    }
    
  3. 使用其他数据结构(如Map<String, ValidateUser>)来存储数据并加快检索速度:

    Map<String, ValidateUser> personerMap = new LinkedHashMap<String, ValidateUser>();
    personerMap.add("admin", new ValidateUser("admin", ...);
    //fill the map with other values...
    //if you still want a Collection<ValidateUser> personer variable
    Collection<ValidateUser> personer = personerMap.values();
    
    //now check for the desired element
    ValidateUser admin = personerMap.get("admin");
    if (admin != null) {
        admin.set...
    }
    

  4. 通过评论,您的ValidateUser是一个不可变对象,因此您无法使用setter更新其字段(因为没有)。因此,这里最好的方法是使用ListIterator<ValidateUser>代替(不要与Iterator混淆)并用修改后的对象替换元素。这是一个例子:

    //the new immutable ValidateUser that will replace the older one...
    //set the parameters as needed
    ValidateUser newAdmin = new ValidateUser("admin", ...);
    ListIterator<ValidateUser> listIterator = personer.listIterator();
    while (listIterator.hasNext()) {
        ValidateUser validateUser = listIterator.next();
        if ("admin".equals(validateUser.getXxx()) {
            listIterator.set(newAdmin);
            break;
        }
    }