Как я могу получить первый элемент из отсортированного списка? - PullRequest
24 голосов
/ 23 марта 2010

Я использовал Collections.sort(playersList); для сортировки List. Итак, я думаю, playersList сортируется сейчас. Но как я могу получить первый элемент списка? playersList[0] не работает.

Ответы [ 8 ]

80 голосов
/ 23 марта 2010
playersList.get(0)

Java имеет ограниченный полиморфизм операторов. Таким образом, вы используете метод get() для List объектов, а не оператор индекса массива ([])

10 голосов
/ 23 марта 2010

Вы должны получить доступ к спискам немного по-другому, чем массивы в Java.См. javadocs для интерфейса List для получения дополнительной информации.

playersList.get(0)

Однако, если вы хотите найти наименьший элемент в playersList, вам не следует сортировать его, а затемполучить первый элемент.Это выполняется очень медленно по сравнению с простым поиском в списке, чтобы найти наименьший элемент.

Например:

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) вместоO(n log n) время.

3 голосов
/ 23 марта 2010

Это зависит от типа вашего списка, для ArrayList использования:

list.get(0);

для LinkedList использование:

list.getFirst();

если вам нравится подход array:

list.toArray()[0];
2 голосов
/ 05 августа 2016

Используя потоки Java 8, вы можете превратить свой список в поток и получить первый элемент в списке, используя метод .findFirst().

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

Метод .findFirst() вернет Необязательный , который может содержать или не содержать строковое значение (может не содержать значение, если stringsList пусто).

Затем, чтобы развернуть элемент из Необязательного, используйте метод .get().

1 голос
/ 23 марта 2010

Ответ Мэтью правильный:

list.get(0);

Чтобы сделать то, что вы пытались:

list[0];

вам придется подождать, пока не выйдет Java 7:

конференция devoxx http://img718.imageshack.us/img718/11/capturadepantalla201003cg.png

Вот интересная презентация Марка Рейнхольда о Java 7

Похоже, сайт в данный момент не работает, попробуйте позже :(

0 голосов
/ 06 мая 2018
    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 голосов
/ 24 марта 2010

Если вы просто хотите получить минимум списка, вместо того, чтобы сортировать его и затем получать первый элемент (O(N log N)), вы можете использовать сделать это за линейное время, используя min:

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

Поначалу это выглядит ужасно, но, глядя на ваши предыдущие вопросы, у вас есть List<String>. Короче говоря: min работает на нем.

Для длинного ответа: все эти вещи super и extends в ограничениях универсального типа - это то, что Джош Блох называет принципом PECS (обычно представлен рядом с картиной Арнольда - Я НЕ ЗНАЮ!)

Производитель расширяется, потребительский супер

По сути, это делает дженерики более мощными, поскольку ограничения являются более гибкими, сохраняя при этом безопасность типов (см .: В чем разница между "super" и "extends" в Java Generics )

0 голосов
/ 24 марта 2010

Если ваша коллекция не является List (и поэтому вы не можете использовать get(int index)), то вы можете использовать итератор:

Iterator iter = collection.iterator();
if (iter.hasNext()) {
    Object first = iter.next();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...