知道索引的集合元素?

时间:2012-12-03 21:02:12

标签: java collections

  

可能重复:
  best way to get value from Collection by index

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

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

1 个答案:

答案 0 :(得分:11)

首先尝试利用实际的实现。如果它是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个元素。但是不要打扰,已经有了一种方法:Guava中的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