我有两个数组列表,例如
List<Integer> integerList = new ArrayList<>();
integerList.add(new Integer(1));
integerList.add(new Integer(2));
integerList.add(new Integer(3));
integerList.add(new Integer(4));
ArrayList<Integer> tempTableau = new ArrayList<Integer>();
for(int i = 0; i < integerList.size(); i++) {
if (i >= 1 && i < 4) {
tempTableau.add(integerList.get(i));
}
}
我想实现的是
tempTableau.set(1, new Integer(-2));
即更改一个数组中的值,它也应该反映另一个数组中的更改 或
System.out.println(integerList.get(2));
System.out.println(tempTableau.get(1));
都应输出-2。
答案 0 :(得分:2)
如果您希望两个列表完全相同,而更改一个列表将更改另一个列表,则可以使它们引用相同的列表,如下所示:-
List<Integer> integerList = new ArrayList<>();
List<Integer> tempTableau = integerList;
如果您要使用其他列表,则无法仅通过一个set()
调用来完成。您还需要更改其他列表。
您可能想出了ArrayList
的自定义扩展名,它将使用一个侦听器并在发生任何更改时调用该侦听器。
更新基于评论:
您可以创建一个包装类来包装整数或使用AtomicInteger
:-
List<AtomicInteger> integerList = new ArrayList<>();
List<AtomicInteger> tempTableau = new ArrayList<>();
AtomicInteger i = new AtomicInteger(50);
integerList.add(i);
tempTableau.add(i);
integerList.get(0).set(60); // change value 50 to 60 in first list
System.out.println(tempTableau.get(0).get()); // value changed in the second
更新基于进一步的评论:
如果是自定义对象,例如:-
public class MyCustomClass {
private String name;
private int age;
// many other fields
// constructor, getters, setters
@Override
public String toString() {
return "MyCustomClass{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
您可以这样创建自己的包装器:-
class Holder<T> {
private T object;
Holder(T object) {
this.object = object;
}
T getObject() {
return object;
}
void setObject(T object) {
this.object = object;
}
}
然后在列表中使用它:-
List<Holder<MyCustomClass>> listOne = new ArrayList<>();
List<Holder<MyCustomClass>> listTwo = new ArrayList<>();
MyCustomClass obj1 = new MyCustomClass("John", 18);
Holder<MyCustomClass> holder1 = new Holder<>(obj1);
listOne.add(holder1);
listTwo.add(holder1);
MyCustomClass obj2 = new MyCustomClass("Paul", 45);
listOne.get(0).setObject(obj2); //make holder1 hold obj2 instead of obj1 in listOne
System.out.println(listTwo.get(0).getObject()); //listTwo prints MyCustomClass{name='Paul', age=45}