Java 在集合集合上迭代
我试图编写一个程序,在一组集合上进行迭代。在下面的示例代码中,我得到一个错误,指出iter.next()是object类型,而不是字符串集。我还有一些关于迭代集合的更神秘的问题。有什么建议吗Java 在集合集合上迭代,java,iterator,set,Java,Iterator,Set,我试图编写一个程序,在一组集合上进行迭代。在下面的示例代码中,我得到一个错误,指出iter.next()是object类型,而不是字符串集。我还有一些关于迭代集合的更神秘的问题。有什么建议吗 Set<String> dogs= new HashSet<String>(); dogs.add("Irish Setter"); dogs.add("Poodle"); dogs.ad
Set<String> dogs= new HashSet<String>();
dogs.add("Irish Setter");
dogs.add("Poodle");
dogs.add("Pug");
dogs.add("Beagle");
Set<String> cats = new HashSet<String>();
cats.add("Himalayan");
cats.add("Persian");
Set<Set<String>> allAnimals = new HashSet<Set<String>>();
allAnimals.add(cats);
allAnimals.add(dogs);
Iterator iter = allAnimals.iterator();
System.out.println(allAnimals.size());
while (iter.hasNext())
{
System.out.println(iter.next().size());
}
Set dogs=newhashset();
添加(“爱尔兰塞特犬”);
添加(“贵宾犬”);
加上“哈巴狗”;
加上(“比格犬”);
Set cats=newhashset();
加上(“喜马拉雅”);
加上(“波斯语”);
Set allAnimals=new HashSet();
所有动物。添加(猫);
所有动物。添加(狗);
迭代器iter=allAnimals.Iterator();
System.out.println(allAnimals.size());
while(iter.hasNext())
{
System.out.println(iter.next().size());
}
具有相同设置的相关问题(减去循环)。
下面的代码片段将生成最终输出,其中包括波浪形块。但我不想改变所有的动物!如何编辑扩展而不影响较大的集合(所有动物)
for(集合扩展名:allAnimals)
{
System.out.println(“设置大小:+extension.size());
扩展名。添加(“~”);
System.out.println(扩展);
}
系统输出打印(所有动物);
您的allAnimals
变量属于Set
类型,但是,当您询问其迭代器时,您“忘记”了类型信息。根据编译器,迭代器只包含对象
s。将获取迭代器的行更改为
Iterator<Set<String>> iter = allAnimals.iterator();
Iterator iter=allAnimals.Iterator();
所有这些都应该很好。使用增强的for循环遍历集合,比使用迭代器更容易:
for (Set<String> names : allAnimals) {
System.out.println(names.size());
}
for(集合名称:allAnimals){
System.out.println(names.size());
}
例如,要遍历所有动物的名称:
for (Set<String> names : allAnimals) {
for (String name : names) {
System.out.println(name);
}
}
for(集合名称:allAnimals){
for(字符串名称:名称){
System.out.println(名称);
}
}
我只会使用一个(嵌套的)foreach循环:
for(Set<String> animals : allAnimals) {
int size = animals.size(); // if you want it
for (String animal : animals) {
// do something with the name
}
}
for(集合动物:所有动物){
int size=anives.size();//如果需要
用于(字符串动物:动物){
//用这个名字做点什么
}
}
您没有提到定义迭代器的类型。因此,就它而言,它期望一个对象作为下一个对象。您不需要调用someSet.clear()代码>创建集合后立即执行。谢谢!我对不启动变量感到紧张,所以有时会过火。@user2623054这是个好建议,我建议遵循它。但是,我还建议将mthmulders answer标记为已接受的答案,因为它可以准确地识别问题。此方法似乎会导致一个新错误:“只能迭代数组或java.lang.Iterable的实例”Set
是Iterable
的实例。你一定是做错了什么,因为上面的方法是有效的,这是目前推荐的迭代方法。
for(Set<String> animals : allAnimals) {
int size = animals.size(); // if you want it
for (String animal : animals) {
// do something with the name
}
}