これは、java.util.Listなどの順序付きコレクション用です。言語設計者が最後のメソッドを含めなかったのはなぜですか?私が考えることができる唯一の理由は次のとおりです。
- コレクションが空の場合のあいまいさ(nullを返すか、例外をスローします)
- APIの膨張
他の理由は?
これは、java.util.Listなどの順序付きコレクション用です。言語設計者が最後のメソッドを含めなかったのはなぜですか?私が考えることができる唯一の理由は次のとおりです。
他の理由は?
回答:
APIの肥大化がおそらく答えです。私の経験から、この機能が必要なのはキューまたはスタックが適切なメソッドを持つジョブの正しいデータ構造であったときだけでした。
get(-1)
リストの末尾からの取得をサポートしていれば、APIの肥大化を追加することなくOPが望んでいたことを実行できます。そのようなものとしての私の答えは、説明のつかない下票を引き付けました。
last()
この方法は、同じように簡単ですlist.get(list.size()-1)
何が存在しないと同じように、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));
}
}
次の出力になります
l.get(0) = A
l.get(l.size()-1) = Z
また、List
インターフェイスを実装するすべてのものが実際にlast()
何かの概念を持っていると仮定することは、ばかげています。
.size()-1
、実装するのに最適な方法ではありませんlast()
(ただし、このような大きなリストはほとんどありません。実装しtoArray()
ます...)
基本的にsize()
は、for
-ループを要求するか、イテレータを要求して反復し、whileまたはdoループで使用する必要があります。目的に適したものを使用してください。
イテレータは、さらにエントリがあるかどうかを特定の時点で認識し、存在する場合は次のエントリを取得できます。その後、「エントリが増えましたか?」まで繰り返す。失敗します。
http://download.oracle.com/javase/tutorial/collections/interfaces/collection.htmlの「コレクションの探索」セクションを参照してください。
collection.get(collection.size() - 1)
。