web-dev-qa-db-ja.com

JavaコレクションAPIに最後のメソッドがないのはなぜですか?

これは、順序付けられたコレクション用です。 Java.util.List。言語デザイナーが最後の方法を含めなかったのはなぜですか?私が考えることができる唯一の理由は:

  • コレクションが空の場合のあいまいさ(nullを返すか例外をスロー)
  • API膨張

他の理由は?

19
three-cups

APIの膨張がおそらく答えです。私の経験から、この機能が必要になったのはキューまたはスタックのみで、適切なメソッドを備えたジョブの正しいデータ構造でした。

13
Alb

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()の概念を持っていると仮定することもまたおかしいです。

16
user7519

_Java.util.LinkedList_は、getLast()およびgetFirst()メソッドを定義します。残念ながら、これらのメソッドはそのインターフェースの1つで定義されていないため、LinkedListタイプを使用する必要があります。最後の要素のみに関心がある場合は、_Java.util.Queue_インターフェースのpeek()メソッドの使用を検討してください。 LinkedListはQueueを実装します。

5
René Link

基本的に、size()forループを要求するか、イテレータを要求して反復し、whileまたはdoループで使用する必要があります。用途に合わせてお使いください。

イテレータは、エントリがまだあるかどうかを特定の時点で認識し、エントリがある場合は次のエントリを取得できるようにします。その後、「エントリが増えるまで」繰り返します。失敗します。

http://download.Oracle.com/javase/tutorial/collections/interfaces/collection.html の「トラバースコレクション」セクションを参照してください。

0
user1249