コレクションがあり、コレクションの最後の要素を取得したい。そうするための最も簡単で速い方法は何ですか?
1つの解決策は、最初にtoArray()を実行し、次に配列の最後の要素を返すことです。他に良いものはありますか?
非常に効率的なソリューションではありませんが、機能するソリューションです。
public static <T> T getFirstElement(final Iterable<T> elements) {
return elements.iterator().next();
}
public static <T> T getLastElement(final Iterable<T> elements) {
T lastElement = null;
for (T element : elements) {
lastElement = element;
}
return lastElement;
}
Collection
は必ずしも順序付けされた要素のセットではないため、「最後の」要素の概念がない場合があります。順序付けされたものが必要な場合は、last()
メソッドを持つSortedSet
を使用できます。または、List
を使用してmylist.get(mylist.size()-1);
を呼び出すことができます
本当に最後の要素が必要な場合は、List
またはSortedSet
を使用する必要があります。しかし、あなたが持っているのがCollection
だけで、本当に本当にreally最後の要素が必要な場合は、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;
}
Iterables.getLast
Google Guavaから。 List
sとSortedSet
sも最適化されています。
1つの解決策は次のとおりです。
list.get(list.size()-1)
編集:次のように、コレクションをリストに変換する必要があります:new ArrayList(coll)
基礎となるコレクションについては何も知らないが、「最後の」要素があることを知っている場合、イテレーターを使用するのが合理的な解決策です。これは常に当てはまるわけではなく、すべてのコレクションが注文されるわけではありません。
Object lastElement = null;
for (Iterator collectionItr = c.iterator(); collectionItr.hasNext(); ) {
lastElement = collectionItr.next();
}
Collectionインターフェースにはlast()
またはfirst()
メソッドはありません。最後のメソッドを取得するには、リストでget(size() - 1)
を実行するか、リストを逆にしてget(0)
を実行します。 Stacks
またはQueues
を扱っている場合を除き、コレクションAPIにlast()
メソッドを用意する必要はありません。
または、for-eachループを使用できます。
Collection<X> items = ...;
X last = null;
for (X x : items) last = x;
上記の問題のいくつか(nullなどに対してロバストではない)を回避するには、リストの最初と最後の要素を取得するアプローチがあります。
import Java.util.List;
public static final <A> A getLastElement(List<A> list) {
return list != null ? getElement(list, list.size() - 1) : null;
}
public static final <A> A getFirstElement(List<A> list) {
return list != null ? getElement(list, 0) : null;
}
private static final <A> A getElement(List<A> list, int pointer) {
A res = null;
if (list.size() > 0) {
res = list.get(pointer);
}
return res;
}
採用されている規則では、空のリストの最初/最後の要素はnullです...