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

发布于 2024-11-28 02:43:47 字数 306 浏览 5 评论 0原文

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

for (Class D : domainMap.keySet())

其中 domainMap 的类型为 java.util.HashMap。对于到目前为止我遇到的此源代码中的所有其他迭代器,我都能够仅使用带有索引的 for 循环来解决无法使用迭代器的问题,但是,Java 中的集合不允许您使用迭代器。通过索引引用其数据。还有其他方法可以访问 Set 中的数据吗?

I have a stripped down version of Java 1.4.2 that does not have the Iterator class. I am trying to port the T2Framework source to be able to run on this target, however, I have run into the following line of code:

for (Class D : domainMap.keySet())

where domainMap is of the type java.util.HashMap. For every other Iterator in this source I've encountered so far, I have been able to just use a for loop with an index to resolve the issue of not being able to use an Iterator, however, a Set in Java does not allow you to reference its data by index. Is there another way to access the data in a Set?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

情何以堪。 2024-12-05 02:43:47

您可以 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
}

You can toArray it, and then use a for loop over that array:

Object[] array = domainMap.keySet().toArray();
for (int i = 0; i < array.length; i++) {
    Object o = domainMap.get(array[i]);

    // Body of loop here
}
轮廓§ 2024-12-05 02:43:47

你没有的是使用 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

相同!

What you don't have is the "enhanced for loop" that uses Iterable, Iterator is in Java since v1.2

You can replace every occurrence of

for( Object o : collection ) { 
}

With

for( Iterator i = collection.iterator(); i.hasNext() ; ) {
   Object o = i.next(); 
}

The former is just syntactic sugar of the later ( see the compiled code ).

See:

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

The same!

梦忆晨望 2024-12-05 02:43:47

我建议:

a) 创建您自己的 java.util.Iterator 类并将其放入 java.util 包中。

或者

b) 使用 Set.toArray() 函数对您有利。

将集合转换为数组后,迭代它就很简单了。

(如果这是唯一的困难,我会选择 b,如果此问题有多个实例,我会选择 a)

示例 Set.toArray():

Object[] myArray = myMap.keySet().toArray();
for(int i = 0; i < myArray.length; i++)
    doStuff((Class)myArray[i]);

如何制作自己的 java.util.Iterator:

使用 此处 并将该类添加到您的类路径中。

I would suggest either:

a) Creating your own java.util.Iterator class and putting it in the java.util package.

OR

b) Using the Set.toArray() function to your advantage.

Once you've converted the set to an array, it's trivial to iterate through it.

(I'd go with b if this is the only difficulty, a if there are more than one instances of this issue)

Example Set.toArray():

Object[] myArray = myMap.keySet().toArray();
for(int i = 0; i < myArray.length; i++)
    doStuff((Class)myArray[i]);

How to make your own java.util.Iterator:

Use the code from here and add that class into your classpath.

没︽人懂的悲伤 2024-12-05 02:43:47

你有枚举吗,它就像通用时代之前的迭代器。 Set 上的 elements() 方法可能会返回它

Have you got the Enumeration, it was like Iterators in pre-generic days. An elements() method on the Set may return it

余生再见 2024-12-05 02:43:47

我不明白......迭代器从java 1.2开始就存在了。

1)你的例子显示了for循环的新语法...在1.4.2中不起作用
2)我确信你可以

Iterator it = mySet().iterator();

像其他响应一样循环遍历它。

编辑:好的,刚刚看到你的新评论...所以你真的没有迭代器!好吧... toArray 实际上是最好的方法

I don't understand... Iterator is there since java 1.2.

1) your example shows the new syntax of for loop... will not work in 1.4.2
2) I`m sure you can do

Iterator it = mySet().iterator();

and loop thru it like other respond.

edit: ok just saw your new comment up... So you really dont have iterator!!! well... the toArray is in fact the best way to do it

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文