簡體   English   中英

Collections 排序/二分查找方法

[英]Collections sort/binarysearch method

我對 Collections API 二進制搜索和排序方法聲明有一個查詢。 binarySearch中有與list參數一起使用的上限通配符。 但是sort方法中的list參數沒有使用上限通配符。 為什么這些不同?

對於sortlist不使用上限通配符。

static <T> void sort(List<T> list, Comparator<? super T> c)

對於binarySearchlist使用上限通配符。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM