2010-03-23 130 views

回答

74
playersList.get(0) 

Java具有有限的運算符多態性。因此,您在List對象上使用get()方法,而不是數組索引操作符([]

9

您必須訪問列表的方式與Java中的數組稍有不同。有關更多信息,請參見javadocsList接口。

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)時間找到的最小元素。

+1

我徘徊爲什麼這樣的基本操作應該編程。爲什麼Java不提供只返回數組中最小值的函數? – Roman 2010-03-24 08:58:25

+2

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

3

這要看是什麼類型列表,對於ArrayList使用:

list.get(0); 

LinkedList使用:

list.getFirst(); 

如果你喜歡array方法:

​​
+2

不好的建議。 LinkedList實現了List接口,不需要使用特殊的方法(我會驚訝於兩者之間有任何性能差異)。並調用toArray()是浪費 - 您可能無故將該列表分配到一個新的數組中! – Kip 2010-03-23 20:57:58

+0

@Kip,奇怪的評論;儘管LinkedList類沒有實現第一個和最後一個方法。如果您有充分的理由使用LinkedList,則不應僅僅因爲它們不在List接口中而使用它的方法。如果列表本身在排序後不需要,並且與OP要求的最接近,那麼數組示例可能非常有用。如果不知道相關源代碼的上下文,則無法確定該建議的有效性。 – rsp 2010-03-23 21:44:39

+0

爲什麼排序後你是否需要列表很重要?在任何情況下(或者即使列表從未排序)調用toArray()只是爲了獲取第一個元素(可能)不必要地創建整個數組。 – Kip 2010-03-24 03:18:38

0

如果您收藏不是List(因此不能使用get(int index)),那麼你可以使用迭代器:

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

如果你只是想要得到的,而不是分類整理,然後讓第一個元素(O(N log N)),您可以用最低的清單,做線性時間使用min

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

這看起來在f粗糙首先,但看看你以前的問題,你有一個List<String>。總之:min適用於它。

對於長回答:所有superextends東西在泛型類型的限制是什麼喬希布洛赫調用佩奇原則(旁邊通常呈現給阿諾德的照片 - 我不是在開玩笑!)

生產者延伸消費者超級

它實質上使仿製藥更強大,因爲制約更加靈活,同時仍保留類型安全(見:what is the difference between ‘super’ and ‘extends’ in Java Generics

2

使用Java 8流,您可以將列表變成流,並使用.findFirst()方法獲取列表中的第一項。

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

.findFirst()方法將返回Optional其可以或可以不包含一個字符串值(它可以不包含值,如果stringsList爲空)。

然後打開項目從可選使用.get()方法。

相關問題