回答
这不是很有效的解决方案,但工作之一:
public static <T> T getFirstElement(final Iterable<T> elements) {
if (elements == null)
return null;
return elements.iterator().next();
}
public static <T> T getLastElement(final Iterable<T> elements) {
final Iterator<T> itr = elements.iterator();
T lastElement = itr.next();
while(itr.hasNext()) {
lastElement=itr.next();
}
return lastElement;
}
好一个解决办法是:
list.get(list.size()-1)
编辑:您以前也许这样对集合转换到一个列表:新的ArrayList(科尔)
一个合理的解决办法是使用迭代器,如果你不知道底层集合的任何内容,但知道有一个“最后一个”元素。情况并非总是如此,并非所有的收藏品都是订购的。
Object lastElement = null;
for (Iterator collectionItr = c.iterator(); collectionItr.hasNext();) {
lastElement = collectionItr.next();
}
正确,我不知道集合的基础类型。但是,如果它是一个大集合,那么它将是一个O(N)解决方案。我基本上正在寻找一个O(1)解决方案。 – tom
这是不可能的。考虑尝试获取单链表的最后一个元素。该操作*具有*为O(n),没有通用的O(1)答案。 –
甲Collection
不是一定元素的有序集合,从而有可能无法“最后一个”元件的概念。如果您想要订购某些东西,则可以使用SortedSet
,该方法具有last()
方法。或者你可以使用一个List
并调用mylist.get(mylist.size()-1);
如果你真的需要的最后一个元素,你应该使用List
或SortedSet
。但是,如果你只有一个Collection
,并且确实需要真的最后一个元素,那么可以使用toArray()
或者您可以使用Iterator
并迭代到列表的末尾。
例如:
public Object getLastElement(final Collection c) {
final Iterator itr = c.iterator();
Object lastElement = itr.next();
while(itr.hasNext()) {
lastElement = itr.next();
}
return lastElement;
}
没有在Collection接口一个last()
或first()
方法。为了获得最后一种方法,您可以在列表上执行get(size() - 1)
或反转列表并执行get(0)
。我没有看到需要在任何收集API中使用last()
方法,除非您正在处理来自Google Guava的Stacks
或Queues
集合也没有get方法。 – tom
当然!我的意思是Collection接口的List实现。 –
或者你可以使用一个for-each循环:
Collection<X> items = ...;
X last = null;
for (X x : items) last = x;
- 1. HQL:获取集合的最后一个元素
- 2. 获取元素的最后一个ID
- 3. 获取SortedDictionary的最后一个元素
- 4. 获取行的最后一个元素
- 5. 确定当前元素是集合的最后一个元素?
- 6. Java:获取拆分后的最后一个元素
- 7. 获取最后一个元素
- 8. 获取最后一个子元素
- 9. 获取最后一个元素
- 10. 如何获取多个元素中的最后一个元素?
- 11. 获取集合中的唯一元素
- 12. 获取arraylist的最后一个元素并丢失旧元素
- 13. 获取元素集合
- 14. Mongodb Aggregate(Java/Spring)查询获取最后一个子元素
- 15. 从nhibernate获取集合获取第一个元素
- 16. 如何遍历一个集合并获取集合的最后一个值
- 17. Backbone集合中的最后一个元素添加/重置?
- 18. 多集删除最后一个元素
- 19. 如何获取两个元组的最后一个元素以外的元素?
- 20. 获取一个/列表/数组的最后一个元素
- 21. Arraylist读取最后一个元素作为第二个最后一个元素
- 22. 在Java的ArrayList中获取第一个和最后一个元素
- 23. 获取F#集合中两个元素之间的元素
- 24. 获取Haskell列表最后一个元素的最快方法
- 25. 获取java中列表元素的最后一部分
- 26. jQuery获取编辑DOM后的最后一个元素
- 27. 比较集合中的元素并将其设置为该集合的最后一个元素
- 28. 如何获取第一个元素和最后一个元素使用django,Location.objects.all()
- 29. LINQ:从一个集合中获取一系列元素
- 30. 获取2个url地址的最后一个元素
所以我需要先用收集来构建列表。性能明智,这将不同于toArray解决方案吗? – tom
如果您所做的只是获取最后一个元素,那么使用toArray()比构建ArrayList效率更高 – mwk
问题提到它是一个集合而不是列表。现在,将它转换为列表只是为了让最后一个元素是一个不好的解决方案,并且如果您有大量集合,可能会导致性能瓶颈。改用Guava的Iterable.getLast方法。 – javadev