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

时间:2018-06-20 02:10:07

标签: java arraylist netbeans

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

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

我试图做类似的事情 userNumbers.get(1 (* 3));,其中1应该是索引,并且我将该索引中的值乘以3,因此由于30是第一个索引,因此将得出10。试图搜寻,但对我没有好运!

3 个答案:

答案 0 :(得分:4)

请尽可能参考Java文档。尤其是This

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

答案 1 :(得分:1)

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

如果将Integer,Long,Float,Double,Boolean,Short,Byte,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类不是不可变的,您可以使用“ setName”更改此值

回到问题,更改此Integer对象,您可以:

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

答案 2 :(得分:1)

我写了一个静态方法来进行更改,您也可以将此方法添加到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
    }