kry*_*tof 0 java collections arraylist
我正在努力理解为什么 ArrayList 中的 addAll() 方法不起作用。我有我的课:
public class XList<E> extends ArrayList<E> {...
}
Run Code Online (Sandbox Code Playgroud)
用一个方法:
public XList<E> union(XList<E> input) {
System.out.println(this);//
System.out.println(input);
this.addAll(input);
return this;
}
Run Code Online (Sandbox Code Playgroud)
System.out.println 表示,正确的值在给定的列表中,但添加后,“this”不会更新,并且未经修改就返回。你能告诉我问题的根源吗?非常感谢任何帮助。
SSCCE:
public class Main {
public static void main(String[] args) {
XList<Integer> list1 = new XList<>(1, 3, 9, 11);
XList<Integer> list2 = XList.of(5, 6, 9);
List<Integer> m1 = list1.union(list2);
System.out.println(m1);
}
}
class XList<E> extends ArrayList<E> {
private List<E> lista;
public XList(E a, E b, E c) {
lista = new ArrayList<>();
lista.add(a);
lista.add(b);
lista.add(c);
}
public XList(E a, E b, E c, E d) {
lista = new ArrayList<>();
lista.add(a);
lista.add(b);
lista.add(c);
lista.add(d);
}
static XList of(Integer a, Integer b, Integer c) {
return new XList(a, b, c);
}
public XList<E> union(XList<E> input) {
System.out.println("this: " + this);
System.out.println("input: " + input);
this.addAll(input);
return this;
}
public String toString() {
return lista.toString();
}
Run Code Online (Sandbox Code Playgroud)
您的问题是您的 XList 令人困惑地扩展了 ArrayList 并且还包含一个列表作为字段。这意味着 XList 基本上是两个单独的列表:它本身就是一个列表,它还包含一个不同的单独列表
如果我是你,我会删除“扩展 ArrayList”并替换
this.addAll(input);
Run Code Online (Sandbox Code Playgroud)
和
this.lista.addAll(input.lista);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |