如何从排序列表中获取第一个元素?
我使用了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 extends T> coll)
一开始看起来很粗糙,但是看看之前的问题,你有一个List
。 简而言之: min
适用于它。
对于长期的答案:所有super
和extends
通用类型约束的东西是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