[英]Collections sort/binarysearch method
我對 Collections API 二進制搜索和排序方法聲明有一個查詢。 在binarySearch
中有與list
參數一起使用的上限通配符。 但是sort
方法中的list
參數沒有使用上限通配符。 為什么這些不同?
對於sort
, list
不使用上限通配符。
static <T> void sort(List<T> list, Comparator<? super T> c)
對於binarySearch
, list
使用上限通配符。
static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c)
我想知道如果sort
方法中不需要上限,為什么這里需要上限。
這樣做的原因是因為當你有一個List<? extends T>
List<? extends T>
,您不能向其中添加元素或從中刪除元素,因為您不知道該列表中元素的類型。 它可能只是T
,也可能是Object
,或者介於兩者之間的任何T
超類。 請參閱Java 泛型與ArrayList<? extends A>
ArrayList<? extends A>
添加元素以獲取更多信息。
正如@Lino - 投票不要說謝謝上面所說,這對binarySearch
很好,因為它不必從給定列表中添加或刪除元素 - 只要比較器可以比較每個元素,它就很高興。 但是, sort
確實必須移動元素,因此它需要列表是已知類型。
這並不意味着它實際上被利用了: java.util.Collections.java
源(OpenJDK 8)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.