使用Java中的Set访问数据而不使用Iterator

时间:2011-08-04 18:23:38

标签: java set jdk1.4

我有一个没有Iterator类的Java 1.4.2的精简版本。我试图移植T2Framework源以便能够在这个目标上运行,但是,我遇到了以下代码行:

for (Class D : domainMap.keySet())

其中domainMap的类型为java.util.HashMap。对于我到目前为止遇到的这个源中的每个其他迭代器,我已经能够使用带索引的for循环来解决无法使用Iterator的问题,但是,Java中的Set不允许你通过索引引用其数据。是否有另一种方法来访问Set中的数据?

5 个答案:

答案 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

diff

同样的!

答案 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实际上是最好的方法