繁体   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