如何从排序列表中获取第一个元素?
我用Collections.sort(playersList);
来排序List
。所以,我认为playersList
现在已经排序。但是,我怎样才能得到列表的第一个元素? playersList[0]
不起作用。如何从排序列表中获取第一个元素?
playersList.get(0)
Java具有有限的运算符多态性。因此,您在List
对象上使用get()
方法,而不是数组索引操作符([]
)
您必须访问列表的方式与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)
时间找到的最小元素。
这要看是什么类型列表,对于ArrayList
使用:
list.get(0);
为LinkedList
使用:
list.getFirst();
如果你喜欢array
方法:
不好的建议。 LinkedList实现了List接口,不需要使用特殊的方法(我会惊讶于两者之间有任何性能差异)。并调用toArray()是浪费 - 您可能无故将该列表分配到一个新的数组中! – Kip 2010-03-23 20:57:58
@Kip,奇怪的评论;尽管LinkedList类没有实现第一个和最后一个方法。如果您有充分的理由使用LinkedList,则不应仅仅因为它们不在List接口中而使用它的方法。如果列表本身在排序后不需要,并且与OP要求的最接近,那么数组示例可能非常有用。如果不知道相关源代码的上下文,则无法确定该建议的有效性。 – rsp 2010-03-23 21:44:39
为什么排序后你是否需要列表很重要?在任何情况下(或者即使列表从未排序)调用toArray()只是为了获取第一个元素(可能)不必要地创建整个数组。 – Kip 2010-03-24 03:18:38
Matthew's answer是正确的:
list.get(0);
要做到你尝试过什么:
list[0];
,你将不得不等待,直到Java 7 is released:
devoxx conference http://img718.imageshack.us/img718/11/capturadepantalla201003cg.png
这里是由马克莱因霍尔德一个有趣的presentation关于Java 7
它看起来像parle YS网站目前下来,稍后再试:(
这似乎并没有真正把它变成java 7 – Gunner 2012-02-10 20:28:39
如果您收藏不是List
(因此不能使用get(int index)
),那么你可以使用迭代器:
Iterator iter = collection.iterator();
if (iter.hasNext()) {
Object first = iter.next();
}
如果你只是想要得到的,而不是分类整理,然后让第一个元素(O(N log N)
),您可以用最低的清单,做线性时间使用min
:
<T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll)
这看起来在f粗糙首先,但看看你以前的问题,你有一个List<String>
。总之:min
适用于它。
对于长回答:所有super
和extends
东西在泛型类型的限制是什么乔希布洛赫调用佩奇原则(旁边通常呈现给阿诺德的照片 - 我不是在开玩笑!)
生产者延伸消费者超级
它实质上使仿制药更强大,因为制约更加灵活,同时仍保留类型安全(见:what is the difference between ‘super’ and ‘extends’ in Java Generics)
使用Java 8流,您可以将列表变成流,并使用.findFirst()
方法获取列表中的第一项。
List<String> stringsList = Arrays.asList("zordon", "alpha", "tommy");
Optional<String> optional = stringsList.stream().findFirst();
optional.get(); // "zordon"
的.findFirst()
方法将返回Optional其可以或可以不包含一个字符串值(它可以不包含值,如果stringsList
为空)。
然后打开项目从可选使用.get()
方法。
我徘徊为什么这样的基本操作应该编程。为什么Java不提供只返回数组中最小值的函数? – Roman 2010-03-24 08:58:25
Roman,有这样一个方法,Collections.min(http://java.sun.com/javase/7/docs/api/java/util/Collections.html#min%28java.util.Collection%29)。 – 2010-03-24 15:10:59