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

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

 playersList.get(0) 

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

您必须以与Java中的数组不同的方式访问列表。 有关更多信息,请参阅List接口的javadocs 。

 playersList.get(0) 

但是,如果要在playersList找到最小元素, 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)时间。

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

 list.get(0); 

对于LinkedList使用:

 list.getFirst(); 

如果你喜欢array方法:

 list.toArray()[0]; 

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

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

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

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

马修的答案是正确的:

 list.get(0); 

要做你尝试过的事情:

 list[0]; 

你必须等到Java 7发布:

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

以下是Mark Reinhold关于Java 7的有趣演示

它看起来像parleys网站目前正在下来,稍后再试:(

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

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

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

 > T min(Collection coll) 

一开始看起来很粗糙,但是看看之前的问题,你有一个List 。 简而言之: min适用于它。

对于长期的答案:所有superextends通用类型约束的东西是Josh Bloch称之为PECS原则(通常出现在Arnold的图片旁边 – 我不是在开玩笑!)

制作人扩展,消费者超级

它本质上使generics更强大,因为约束更灵活,同时仍然保持类型安全性(参见: Javagenerics中’super’和’extends’之间的区别是什么 )

  public class Main { public static List list = new ArrayList(); public static void main(String[] args) { List 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