繁体   English   中英

如何更改 ArrayList 中特定元素的值?

[英]How to change value of a specific element in an ArrayList?

所以这里我有一个数字数组,我只想更改特定索引的值。

ArrayList <Integer> numbers = new ArrayList <> ();
numbers.add(5);
numbers.add(10);
numbers.add(20);

我试图做类似userNumbers.get(1 (* 3));事情userNumbers.get(1 (* 3)); 其中1应该是索引,我将该索引中的值乘以 3,因此结果为30因为10是第一个索引。 尝试搜索,但我没有运气!

尽可能参考 Java 文档。 特别。

numbers.set(1, numbers.get(1) * 3);

就个人而言,我认为这是因为“Integer”是一个不可变类,这意味着您不能使用其成员方法更改不可变对象的值。

如果将 Integer、Long、Float、Double、Boolean、Short、Byte、Character、String 等不可变类放入列表中,则无法立即更改值。

但是,如果您将自定义对象放入列表中,则可以更改该值。

演示代码:

public class RRR {
    public static void main(String[] args) {
        ArrayList <Hi> hiList = new ArrayList <> ();
        Hi hi1 = new Hi("one");
        Hi hi2 = new Hi("two");
        Hi hi3 = new Hi("three");
        hiList.add(hi1);
        hiList.add(hi2);
        hiList.add(hi3);
        Hi hix = hiList.get(0);
        hix.setName("haha");
        System.out.println(hiList.get(0).getName());    // changed from "one" to "haha"
    }


}

class Hi {
    public Hi(String name) {
        this.name = name;
    }
    private String name;
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return this.name;
    }
}

看? 类 Hi 不是 Immutable ,您可以使用“setName”更改此值

回到问题,改变这个Integer对象,可以:

  1. 如果您的列表不是太大(不好),则将新值和原点值复制到新列表中。
  2. 删除旧元素,然后将新值设置为正确的索引。(应该考虑线程安全问题)

我编写了一个静态方法来进行更改,您也可以将此方法添加到 ArrayList 类中。 正如您在帖子中所说的那样,这会将元素乘以 3:

public static void main(String[] args) {
    ArrayList<Integer> numbers = new ArrayList<>();
    numbers.add(5);
    numbers.add(10);
    numbers.add(20);

    System.out.println(numbers.get(2)); //before

    changeList(numbers, 2);

    System.out.println(numbers.get(2)); //After!
}

//This method will take in the list, and the element number
static void changeList(ArrayList<Integer> arrayList, int elementNum) {
    int temp = arrayList.get(elementNum);
    arrayList.remove(elementNum); //remove it

    int newValue = temp * 3; //do anything you want here to the data
    arrayList.add(elementNum, newValue); //place the value back in the arrayList
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM