回答
這不是很有效的解決方案,但工作之一:
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