java 如何从排序列表中获取第一个元素?

hts6caw3  于 2023-09-29  发布在  Java
关注(0)|答案(9)|浏览(179)

我使用Collections.sort(playersList);List进行排序。所以,我认为playersList现在已经排序了。但是我怎样才能得到列表的第一个元素呢?playersList[0]不工作。

6za6bjd0

6za6bjd01#

playersList.get(0)

Java有有限的操作符多态性。因此,在List对象上使用get()方法,而不是数组索引操作符([]

hmtdttj4

hmtdttj42#

在Java中,访问列表与访问数组有一点不同。有关List接口的详细信息,请参阅javadocs

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)时间。

l7wslrjt

l7wslrjt3#

这取决于您的列表是什么类型,对于ArrayList用途:

list.get(0);

对于LinkedList用途:

list.getFirst();

如果你喜欢array方法:

list.toArray()[0];
6qfn3psc

6qfn3psc4#

使用Java 8流,您可以将列表转换为流,并使用.findFirst()方法获取列表中的第一项。

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

.findFirst()方法将返回一个Optional,它可能包含也可能不包含字符串值(如果stringsList为空,则可能不包含值)。
然后使用.get()方法从Optional中展开该项。

czfnxgou

czfnxgou5#

从Java 21开始,只需使用List.getFirst

System.out.println(playersList.getFirst());

**注意:**如果列表为空则抛出NoSuchElementException

JEP 431: Sequenced Collections中的其他详细信息。

vu8f3i0k

vu8f3i0k6#

马修的回答是正确的:

list.get(0);

做你尝试过的事:

list[0];

你必须等到Java 7 is released:
devoxx conference http://img718.imageshack.us/img718/11/capturadepantalla201003cg.png
下面是Mark Reinhold关于Java 7的一个有趣的presentation
看起来Parleys网站目前关闭,稍后再试:(

wvyml7n5

wvyml7n57#

如果你的集合不是一个List(因此你不能使用get(int index)),那么你可以使用迭代器:

Iterator iter = collection.iterator();
if (iter.hasNext()) {
    Object first = iter.next();
}
hjqgdpho

hjqgdpho8#

如果你只想得到一个列表的最小值,而不是对它进行排序,然后得到第一个元素(O(N log N)),你可以使用min在线性时间内完成:

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

这看起来很粗糙,但是看看你之前的问题,你有一个List<String>。简而言之:min在上面工作。
对于冗长的回答:泛型类型约束中的所有superextends内容都是Josh Bloch称之为佩奇原则的内容(通常在Arnold的图片旁边显示--我不是开玩笑!)
生产商扩展,消费者超级
它本质上使泛型更强大,因为约束更灵活,同时仍然保持类型安全(请参阅:what is the difference between ‘super’ and ‘extends’ in Java Generics

kzipqqlq

kzipqqlq9#

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
with l.sort(null)returned 45

相关问题