我正在尝试编写一个迭代一组集的程序。在下面的示例代码中,我收到一条错误,指出iter.next()是object类型而不是一组字符串。我也有一些其他更神秘的问题,也可以迭代几组。有什么建议吗?
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());
}
具有相同设置的相关问题(减去循环) 下面的代码片段产生包括波浪号的最终输出。但我不想在我去的时候改变所有的动物!如何编辑扩展名而不影响较大的集合(allAnimals)。
for (Set<String> extension : allAnimals)
{
System.out.println("Set size: " + extension.size());
extension.add("~");
System.out.println(extension);
}
System.out.println(allAnimals);
答案 0 :(得分:6)
您的allAnimals
变量的类型为Set<Set<String>>
,但是当您要求其Iterator
“忘记”类型信息时。根据编译器,您的迭代器只包含Object
个。将获得Iterator
的行更改为此
Iterator<Set<String>> iter = allAnimals.iterator();
一切都应该没问题。
答案 1 :(得分:4)
使用增强的for循环来遍历集合,比使用迭代器更容易:
for (Set<String> names : allAnimals) {
System.out.println(names.size());
}
例如,遍历所有动物的名字:
for (Set<String> names : allAnimals) {
for (String name : names) {
System.out.println(name);
}
}
答案 2 :(得分:2)
您没有提到定义迭代器的type
。因此,就它而言,它期望下一个对象。
答案 3 :(得分:1)
我只想使用(嵌套的)foreach循环:
for(Set<String> animals : allAnimals) {
int size = animals.size(); // if you want it
for (String animal : animals) {
// do something with the name
}
}