4

可能重复:
按索引从集合中获取价值的最佳方式

说我有一个Collection. 我需要在索引 2 处获取元素。

如果没有 get 方法并且迭代器不跟踪索引,我该怎么做?

4

1 回答 1

12

首先尝试利用实际的实现。如果它是一个List你可以沮丧并使用更好的API:

if(collection instanceof List) {
  ((List<Foo>)collection).get(1);
}

但是“”解决方案是创建一个Iterator并调用next()两次。这是您拥有的唯一通用界面:

Iterator<Foo> fooIter = collection.iterator();
fooIter.next();
Foo second = fooIter.next();

这可以很容易地推广到第 k 个元素。但不要打扰,已经有一种方法:Iterators.html#get(Iterator, int)在番石榴中:

Iterators.get(collection.iterator(), 1);

...或与Iterables.html#get(Iterable, int)

Iterables.get(collection, 1);

如果您需要多次执行此操作,则在以下位置创建集合的副本可能会更便宜ArrayList

ArrayList<Foo> copy = new ArrayList<Foo>(collection);
copy.get(1); //second
于 2012-12-03T21:03:57.770 回答