Java 集合-清除()
我创建了一个集合,并用集合中的元素填充它,但当我尝试使用Java 集合-清除(),java,collections,iterator,Java,Collections,Iterator,我创建了一个集合,并用集合中的元素填充它,但当我尝试使用foreach构造(或其他方法)遍历此容器时,它什么也不返回,我尝试获取size(),并看到了我期望的结果(适当的数字)但似乎每个集合中不为空的容器都是空的 代码片段示例: Item it1, it2; List<Collection<Item>> hull = new ArrayList<Collection<Item>>(); List<Item> seq = new Arra
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);
项目it1、it2;
列表外壳=新的ArrayList();
List seq=新的ArrayList();
以下新增内容(it1);
船体。添加(序号);
seq.clear();
新增(it2);
船体。添加(序号);
对于(每次调用seq.clear()
都会清空内部ArrayList。不要忘记,在向集合添加对象时,只会添加引用。不要克隆对象。应该在每次迭代时创建一个新的ArrayList对象
例如
每次调用seq.clear()
时,都会清空内部ArrayList。不要忘记,向集合添加对象时,只会添加引用。不要克隆对象。每次迭代时都应该创建一个新的ArrayList对象
例如
为了遍历集合的集合,需要一个嵌套的foreach
for(Collection<Item> c: hull)
{
for(Item i: c)
{
}
}
for(集合c:外壳)
{
关于(项目i:c)
{
}
}
顺便问一下,您是否知道it1和it2没有初始化,这就是为什么您什么都没有得到
size()将始终为您提供集合的大小,但它们可能包含空值(这是您的情况)。为了迭代集合,您需要一个嵌套的foreach
for(Collection<Item> c: hull)
{
for(Item i: c)
{
}
}
for(集合c:外壳)
{
关于(项目i:c)
{
}
}
顺便问一下,您是否知道it1和it2没有初始化,这就是为什么您什么都没有得到
size()将始终为您提供集合的大小,但它们可能包含null(这是您的情况)。您的代码已更正为编译:
package sample;
import java.util.ArrayList;
import java.util.List;
public class Item {
public static void main( String[] args ) {
List< List< Item >> hull = new ArrayList<>();
List< Item > seq = new ArrayList<>();
seq.add( new Item());
hull.add( seq );
seq = new ArrayList<>(); // in place of seq.clear();
seq.add( new Item());
hull.add( seq );
for( List<Item> c: hull ) {
System.out.println( c.get( 0 ));
}
}
}
如您所见,没有问题。您的代码已更正为编译:
package sample;
import java.util.ArrayList;
import java.util.List;
public class Item {
public static void main( String[] args ) {
List< List< Item >> hull = new ArrayList<>();
List< Item > seq = new ArrayList<>();
seq.add( new Item());
hull.add( seq );
seq = new ArrayList<>(); // in place of seq.clear();
seq.add( new Item());
hull.add( seq );
for( List<Item> c: hull ) {
System.out.println( c.get( 0 ));
}
}
}
正如您所见,没有问题。听起来不错,需要检查)@zest您得到了什么输出?你能发布一个完整的最小程序,这样我们就可以重现这个行为吗?非常感谢,创建新集合的每一步帮助七清除,列表被添加到列表中,所以第一个参数是错误的实际上是正确的将重用列表seq而不是创建seq2Sounds很棒,需要检查)@zest你得到了什么输出?你能发布一个完整的最小程序,这样我们就可以重现这个行为吗?非常感谢,创建新集合的每一步都会清除,一个列表被添加到列表中,所以第一个参数是错误的,实际上正确的将是重用list seq而不是creation Seq2。该代码不会编译。它缺少
,get(0)
未在集合中定义,用于(OMG,这不是用于编译的代码,只是一个示例。我很高兴它至少为我提供了hashcode。谢谢大家,我得到了它。此代码未编译。它缺少;
,get(0)
未在集合中定义,,(天哪,这不是用于编译的代码,只是一个示例。我很高兴至少能为我翻出hashcode谢谢大家,我得到了itList>hull=new ArrayList();我不知道这么短的声明集合的方式,我的示例不只是用于编译抽象,很抱歉那个列表>hull=new ArrayList();我不知道这么短的声明集合的方法,我的示例不只是用于编译抽象,对此表示抱歉
package sample;
import java.util.ArrayList;
import java.util.List;
public class Item {
public static void main( String[] args ) {
List< List< Item >> hull = new ArrayList<>();
List< Item > seq = new ArrayList<>();
seq.add( new Item());
hull.add( seq );
seq = new ArrayList<>(); // in place of seq.clear();
seq.add( new Item());
hull.add( seq );
for( List<Item> c: hull ) {
System.out.println( c.get( 0 ));
}
}
}
sample.Item@6da264f1
sample.Item@40914272