gpt4 book ai didi

java - 集合 -clear()

转载 作者:行者123 更新时间:2023-12-01 08:13:39 26 4
gpt4 key购买 nike

我创建了一个集合,并用也是集合的元素填充它,但是当我尝试使用 foreach 构造(或其他方法)迭代此容器时,它什么也没返回,我尝试过获取 size() 并看到我所期望的(适当的数字),但似乎每个集合内不为空的容器为空

代码片段示例:

Item it1, it2;
List<Collection<Item>> hull = new ArrayList<Collection<Item>>();
List<Item> seq = new ArrayList<Item>();
seq.add(it1);
hull.add(seq);
seq.clear();
seq.add(it2);
hull.add(seq);
for (<Collection<Item> c: hull)
System.out.println(c);

这只是我所做工作的一个简化片段请提出替代方案。我哪里做错了?

最佳答案

每次调用 seq.clear() 时,都会清空内部 ArrayList。不要忘记,当您将对象添加到集合时,您仅添加了引用。您不克隆该对象。您应该在每次迭代时创建一个新的 ArrayList 对象。

例如

List<Collection<Item>> hull = new ArrayList<Collection<Item>>();
List<Item> seq = new ArrayList<Item>();
seq.add(it1);
hull.add(seq);
List<Item> seq2 = new ArrayList<Item>();
seq2.add(it2)
hull.add(seq2);

编辑:

编译的完整示例:

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

public class NewClass1 {

static class Item {

String a;

public Item(String a) {
this.a = a;
}
@Override
public String toString() {
return a;
}
}

public static void main(String[] args) {
List<Collection<Item>> hull = new ArrayList<Collection<Item>>();
List<Item> seq = new ArrayList<Item>();
Item it1 = new Item("item 1");
seq.add(it1);
hull.add(seq);
List<Item> seq2 = new ArrayList<Item>();
Item it2 = new Item("item 2");
seq2.add(it2);
hull.add(seq2);

for (Collection<Item> current : hull) {
for (Item item : current) {
System.out.println(item);
}
}
}
}

输出:

run:
item 1
item 2

关于java - 集合 -clear(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15281834/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com