<p>严格地说,不,因为Python中的enumerate()函数返回元组列表,而元组在Java中不存在。</p>
<p>但是,如果您感兴趣的只是打印索引和值,那么您可以按照Richard fern的建议在迭代器上使用nextIndex()和next()。</p>
<p>还要注意,枚举()可以使用更通用的zip()函数(使用Python语法)定义:</p>
<pre><code>mylist = list("abcd")
zip(range(len(mylist)), mylist)
</code></pre>
<p>给出[(0,'a'),(1,'b'),(2,'c'),(3,'d')]</p>
<p>如果您定义了自己的元组类(请参见<a href="https://stackoverflow.com/questions/2670982/using-tuples-in-java">Using Pairs or 2-tuples in Java</a>作为起点),那么您当然可以用Java编写自己的zip()函数来利用它(使用链接中定义的元组类):</p>
<pre><code>public static <X,Y> List<Tuple<X,Y>> zip(List<X> list_a, List<Y> list_b) {
Iterator<X> xiter = list_a.iterator();
Iterator<Y> yiter = list_b.iterator();
List<Tuple<X,Y>> result = new LinkedList<Tuple<X,Y>>();
while (xiter.hasNext() && yiter.hasNext()) {
result.add(new Tuple<X,Y>(xiter.next(), yiter.next()));
}
return result;
}
</code></pre>
<p>一旦有了zip(),实现enumerate()就很简单了。</p>
<p>编辑:一天工作很慢,所以要完成它:</p>
<pre><code>public static <X> List<Tuple<Integer,X>> enumerate (List<X> list_in) {
List<Integer> nums = new ArrayList<Integer>(list_in.size());
for (int x = 0; x < list_in.size(); x++) {
nums.add(Integer.valueOf(x));
}
return zip (nums, list_in);
}
</code></pre>
<p>编辑2:正如对这个问题的评论所指出的,这并不完全等同。虽然它生成的值与Python的enumerate相同,但它的生成方式与Python的enumerate不同。因此,对于大型收藏品来说,这种方法可能非常令人望而却步。</p>