我有一个没有Iterator类的Java 1.4.2的精简版本。我试图移植T2Framework源以便能够在这个目标上运行,但是,我遇到了以下代码行:
for (Class D : domainMap.keySet())
其中domainMap的类型为java.util.HashMap。对于我到目前为止遇到的这个源中的每个其他迭代器,我已经能够使用带索引的for循环来解决无法使用Iterator的问题,但是,Java中的Set不允许你通过索引引用其数据。是否有另一种方法来访问Set中的数据?
答案 0 :(得分:4)
你可以toArray
,然后在该数组上使用for循环:
Object[] array = domainMap.keySet().toArray();
for (int i = 0; i < array.length; i++) {
Object o = domainMap.get(array[i]);
// Body of loop here
}
答案 1 :(得分:4)
你所没有的是使用Iterable
的“增强for循环”,Iterator
自v1.2开始就在Java中
您可以替换每次出现的
for( Object o : collection ) {
}
用
for( Iterator i = collection.iterator(); i.hasNext() ; ) {
Object o = i.next();
}
前者只是后者的语法糖(参见编译代码)。
请参阅:
C:\>more > A.java
class A {
void m() {
for( Object o : new java.util.HashSet() ) {
}
}
}
^C
C:\>javac A.java
C:\>more > B.java
class B {
void m() {
for( java.util.Iterator i = new java.util.HashSet().iterator() ; i.hasNext() ; ) {
Object o = i.next();
}
}
}
^C
C:\>javac B.java
C:\>gvim -d a.d b.d
同样的!
答案 2 :(得分:2)
我建议:
a)创建自己的java.util.Iterator类并将其放在java.util包中。
OR
b)使用Set.toArray()函数。
将集合转换为数组后,迭代它就很容易了。
(如果这是唯一的困难,我会选择b,如果这个问题有多个实例的话,我会选择)
示例Set.toArray():
Object[] myArray = myMap.keySet().toArray();
for(int i = 0; i < myArray.length; i++)
doStuff((Class)myArray[i]);
如何制作自己的java.util.Iterator:
使用here中的代码并将该类添加到类路径中。
答案 3 :(得分:1)
您是否获得了Enumeration,它就像是前通用时代的Iterators。 Set上的elements()方法可以返回它
答案 4 :(得分:1)
我不明白......自从java 1.2以来,Iterator就在那里。
1)您的示例显示for循环的新语法...在1.4.2中不起作用 2)我确定你能做到
Iterator it = mySet().iterator();
并像其他人一样循环播放。
编辑好的,只是看到了你的新评论......所以你真的没有迭代器!嗯... toArray实际上是最好的方法