web-dev-qa-db-ja.com

ソートされたリストから最初の要素を取得するにはどうすればよいですか?

ListをソートするためにCollections.sort(playersList);を使用しました。したがって、playersListは現在ソートされていると思います。しかし、どのようにしてリストの最初の要素を取得できますか? playersList[0] 動作しません。

25
Roman
_playersList.get(0)
_

Javaの演算子ポリモーフィズムは限られています。したがって、配列インデックス演算子(_[]_)ではなく、Listオブジェクトに対してget()メソッドを使用します。

82

Javaの配列とは少し異なる方法でリストにアクセスする必要があります。詳細については、Listインターフェイスの javadocs を参照してください。

_playersList.get(0)
_

ただし、playersListで最小の要素を検索する場合は、並べ替えてから最初の要素を取得しないでください。これは、最小の要素を見つけるためにリストを1回検索するのに比べて、実行に非常に時間がかかります。

例えば:

_int smallestIndex = 0;
for (int i = 1; i < playersList.size(); i++) {
    if (playersList.get(i) < playersList.get(smallestIndex))
        smallestIndex = i;
}

playersList.get(smallestIndex);
_

上記のコードは、O(n) timeではなくO(n log n)で最小の要素を見つけます。

10
jjnguy

ArrayListを使用するには、リストのタイプによって異なります。

list.get(0);

LinkedListの使用:

list.getFirst();

arrayアプローチが好きな場合:

list.toArray()[0];
3
rsp

Java 8ストリーム)を使用すると、リストをストリームに変換し、.findFirst()メソッドを使用してリストの最初の項目を取得できます。

_List<String> stringsList = Arrays.asList("zordon", "alpha", "tommy");
Optional<String> optional = stringsList.stream().findFirst();
optional.get(); // "zordon"
_

.findFirst()メソッドは、文字列値を含む場合と含まない場合があります(stringsListが空の場合、値を含まない場合があります) オプション を返します。

次に、オプションからアイテムをアンラップするには、.get()メソッドを使用します。

2
svarog

マシューの答え は正しい:

list.get(0);

試したことを行うには:

list[0];

Java 7がリリースされるまで待つ必要があります:

devoxx会議http://img718.imageshack.us/img718/11/capturadepantalla201003cg.png

Mark Reinholdによる興味深い プレゼンテーション Java 7

Parleysサイトは現在ダウンしているようです。後で試してください:(

1
OscarRyz

リストを並べ替えて最初の要素(O(N log N))を取得する代わりに、リストの最小値を取得する場合は、minを使用して線形時間で実行できます。

<T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll)

それは最初はひどく見えますが、以前の質問を見ると、List<String>。要するに:minはそれで動作します。

長い答え:ジェネリック型制約のsuperextendsのすべては、Josh BlochがPECS原則と呼んでいるものです(通常、Arnoldの写真の横に表示されます-私はキッドではありません) !)

プロデューサーの拡張、コンシューマーのスーパー

型の安全性を維持しながら制約がより柔軟になるため、基本的にジェネリックがより強力になります(参照: 「スーパー」と「拡張」の違いJavaジェネリック)

0

コレクションがListでない場合(したがってget(int index)を使用できない場合)、反復子を使用できます。

Iterator iter = collection.iterator();
if (iter.hasNext()) {
    Object first = iter.next();
}
0
Steve Kuo
    public class Main {

    public static List<String> list = new ArrayList();

    public static void main(String[] args) {

        List<Integer> l = new ArrayList<>();

        l.add(222);
        l.add(100);
        l.add(45);
        l.add(415);
        l.add(311);

        l.sort(null);
        System.out.println(l.get(0));
    }
}

l.sort(null)なしで222を返しました

l.sort(null)が45を返す

0