[英]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.