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);
如果你真的需要最后一个元素,你应该使用一个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; }
来自Google Guava的Iterables.getLast
。 它对List
和SortedSet
也有一些优化。
那么一个解决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)
。 除非您正在处理Stacks
或Queues
否则我不认为需要在任何Collection API中使用last()
方法
或者你可以使用for-each循环:
Collection<X> items = ...; X last = null; for (X x : items) last = x;