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

时间:2010-03-23 20:29:44

标签: java list sorting

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

8 个答案:

答案 0 :(得分:79)

playersList.get(0)

Java限制了运算符多态性。所以你在get()个对象上使用List方法,而不是数组索引操作符([]

答案 1 :(得分:10)

您必须以与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)时间内的最小元素。

答案 2 :(得分:3)

这取决于您的列表的类型,ArrayList使用:

list.get(0);

用于LinkedList

list.getFirst();

如果你喜欢array方法:

list.toArray()[0];

答案 3 :(得分:2)

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

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

.findFirst()方法将返回Optional,其中可能包含或不包含字符串值(如果stringsList为空,则可能不包含值)。

然后从Optional中解开项目,使用.get()方法。

答案 4 :(得分:1)

Matthew's answer是正确的:

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网站目前正在关闭,稍后再试:(

答案 5 :(得分:0)

如果您的集合不是List(因此您无法使用get(int index)),那么您可以使用迭代器:

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

答案 6 :(得分:0)

如果您只想获得列表的最小值,而不是对其进行排序,然后获取第一个元素(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的图片旁边 - 我不是开玩笑!)

  

Producer Extends,Consumer Super

它本质上使泛型更强大,因为约束更灵活,同时仍然保持类型安全(参见:what is the difference between ‘super’ and ‘extends’ in Java Generics

答案 7 :(得分:0)

    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