Java获取集合的最后一个元素

我有一个集合,我想获得集合的最后一个元素。 什么是最直接和最快捷的方式呢?

一种解决方法是首先toArray(),然后返回数组的最后一个元素。 还有其他更好的吗?

这不是非常有效的解决scheme,但工作之一:

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; } 

一个Collection不是一个有序的元素集,所以可能没有“最后一个”元素的概念。 如果你想要的东西是有序的,你可以使用具有last()方法的SortedSet 。 或者你可以使用List并调用mylist.get(mylist.size()-1);

如果你真的需要最后一个元素,你应该使用一个ListSortedSet 。 但是,如果你拥有的只是一个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; } 

来自Google Guava的Iterables.getLast 。 它对ListSortedSet也有一些优化。

那么一个解决scheme可能是:

 list.get(list.size()-1) 

编辑:你必须将集合转换为列表之前可能是这样的:new ArrayList(coll)

一个合理的解决scheme是使用一个迭代器,如果你不知道底层的集合,但知道有一个“最后”的元素。 情况并非总是如此,并不是所有的collections品都是有序的。

 Object lastElement = null; for (Iterator collectionItr = c.iterator(); collectionItr.hasNext(); ) { lastElement = collectionItr.next(); } 

Collection接口中没有last()first()方法。 为了得到最后一个方法,你可以在列表上get(size() - 1) ,或者反转List并get(0) 。 除非您正在处理StacksQueues否则我不认为需要在任何Collection API中使用last()方法

或者你可以使用for-each循环:

 Collection<X> items = ...; X last = null; for (X x : items) last = x;