如果我有一个集合,例如 Collection<String> strs
,我怎样才能取出第一个项目?我可以调用 Iterator
,拿走它的第一个 next()
,然后扔掉 Iterator
。有没有一种不那么浪费的方法呢?
原文由 Nick Heiner 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果我有一个集合,例如 Collection<String> strs
,我怎样才能取出第一个项目?我可以调用 Iterator
,拿走它的第一个 next()
,然后扔掉 Iterator
。有没有一种不那么浪费的方法呢?
原文由 Nick Heiner 发布,翻译遵循 CC BY-SA 4.0 许可协议
看起来这是最好的方法:
String first = strs.iterator().next();
好问题…起初,这似乎是对 Collection
接口的疏忽。
请注意,“first”并不总是返回您放入集合中的第一个东西,并且可能只对有序集合有意义。也许这就是为什么没有 get(item)
调用的原因,因为不一定保留顺序。
虽然这看起来有点浪费,但它可能没有你想象的那么糟糕。 Iterator
实际上只包含集合中的索引信息,通常不是整个集合的副本。调用此方法确实会实例化 Iterator
对象,但这实际上是唯一的开销(不像复制所有元素)。
例如,查看 ArrayList<String>.iterator()
方法返回的类型,我们看到它是 ArrayList::Itr
。这是一个内部类,它直接访问列表的元素,而不是复制它们。
请务必检查 iterator()
的返回,因为它可能为空或 null
取决于实现。
原文由 jheddings 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
Iterables.get(yourC, indexYouWant)
因为实际上,如果您使用的是 Collections,那么您应该使用 Google Collections。