Bu, java.util.List gibi sıralı koleksiyonlar içindir. Dil tasarımcıları neden son bir yöntem içermiyordu? Düşünebilmemin tek nedeni:
- koleksiyon boş olduğunda belirsizlik (null döndür veya istisna at)
- API şişmesi
Başka nedenleri var mı?
Bu, java.util.List gibi sıralı koleksiyonlar içindir. Dil tasarımcıları neden son bir yöntem içermiyordu? Düşünebilmemin tek nedeni:
Başka nedenleri var mı?
Yanıtlar:
API şişkinliği muhtemelen cevaptır. Deneyimlerime göre, bu işlevselliğe ihtiyacım olan tek zaman bir Kuyruk veya Yığın, uygun yönteme sahip olan iş için doğru veri yapısı idi.
get(-1)
bir listenin sonundan almayı destekliyorsa , OP'nin API bloat eklemeden istediğini yapardı. Benim cevabım açıklanamayan inişler yaptı.
bir last()
yöntem, tıpkı bir yöntem ya da yöntem list.get(list.size()-1)
olmadığı kadar kolaydır . Sentezlemek o kadar da zor değil ve bir uzmanlık alanı. Ayrıca listeyi ve hangi öğeyi verecektir . Yapması kolay şeyler, genellikle kendi özel yöntemlerini almazlar.first()
fifth()
reverse()
list.get(0)
last
import java.util.ArrayList;
import java.util.List;
public class Main
{
public static void main(String[] args)
{
final List<String> l = new ArrayList<String>();
l.add("A");
l.add("B");
l.add("Z");
System.out.println("l.get(0) = " + l.get(0));
System.out.println("l.get(l.size()-1) = " + l.get(l.size() - 1));
}
}
aşağıdaki çıktıyla sonuçlanır
l.get(0) = A
l.get(l.size()-1) = Z
List
arabirimi uygulayan her şeyin aslında bir last()
şey kavramına sahip olduğunu varsaymak da küstahtır .
.size()
mevcut boyutu döndürecek .size()-1
olursa olsun, yine de tam olarak doldurulup doldurulmadığını nasıl bilebilir?
.size()-1
değerini döndürür, bu yüzden uygulamak için mükemmel bir yol değildir last()
(bu kadar büyük bir liste çok olası değildir ve böyle bir listenin nasıl olduğunu merak ediyorum uygulamak toArray()
...)
java.util.LinkedList
Tanımlar getLast()
ve getFirst()
yöntemler. Ne yazık ki bu yöntemler arayüzlerinden birinde tanımlanmamıştır, bu yüzden LinkedList türünü kullanmanız gerekir. Yalnızca son öğeyle ilgileniyorsanız, java.util.Queue
arabirimin peek()
yöntemini kullanmayı düşünebilirsiniz . LinkedList, Kuyruğu uygular.
Temel olarak ya size()
bir for
-loop istemeniz ya da yineleyicisini sorarak yinelemeniz ve bir süre ya da do-loop kullanmanız gerekir. Amacınıza uygun olanı kullanın.
Yineleyici belirli bir noktada daha fazla giriş olup olmadığını bilir ve varsa bir sonrakini almanızı sağlar. Daha sonra tekrar "giriş daha?" başarısız olur.
Http://download.oracle.com/javase/tutorial/collections/interfaces/collection.html adresindeki "Koleksiyonların Geçişi" bölümüne bakın.
collection.get(collection.size() - 1)
.