Collections类的sort排序方法只能排list类型的?

MikeDDT009 2017-04-13 11:29:34
基本类型和String类型都能排,然后看到这个要自建排序器(或者比较器这样说)带参的sort方法就不是很明白了,查看API叫有看没懂,于是问问:
public static <T> void sort(List<T> list, Comparator<? super T> c)
API里面说明:c - 确定列表顺序的比较器。null 值指示应该使用元素的自然顺序。

我的理解
这里面List(接口)就是指List类型,那么也就是说只能对集合的具体类的Arraylist和LinkedList这两种类型进行排序,由于接口也能向上转型,光论排序的内容的话其它各种自建类型都行。

里面的<T>代表泛型或者说限定了数据具体类型

然后就 Comparator<? super T> c 这里就不是很明白了,于是问问这里到底什么意思,这里不看<>里的内容就是要传一个Comparator的具体对象,虽然具体看到的案例也就是new了一个自建比较器,但是对里面的返回值搞不明白是什么情况(看到例子是取-1 0 1),还有这里<? super T>于是问问
...全文
564 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxyscls 2017-04-14
  • 打赏
  • 举报
回复
引用
Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.
你要反着写,就是从大到小(降序)
引用
<? super T>
遵守PECS原则:producer extends, consumer super。生产的更窄,方便返回;消费的更宽,方便接收。 ? super T,也就是Comparator的入参是个子类实例也能吃
逗泥丸的平方 2017-04-14
  • 打赏
  • 举报
回复
引用 1 楼 qq_35209952 的回复:
那么也就是说只能对集合的具体类的Arraylist和LinkedList这两种类型进行排序 这就不开心了 . 实现list的多了去了. 你自己写个list也是ok的呀. list是用array存储的, 其实这个排序也就是给array排序. Arrays.sort(a); 显然Collection下其他的集合就都不行了.比如set里面装了个map. 至于 Comparator<? super T> c 这就是个比较器啊. 问号 是看你传什么类型了. 就是要你重新定义一下比较规则. 比如你传student,按年龄排序, 那就在里面写上年龄相关的排序规则就好了. 什么+1,0,-1之类的就是大小规则.. 这个 比较器的<? super T> 是针对你list<?>使用的类型来讲的. 建议你去看 一下Arrays.sort的代码 当然最好从collections.sort开始看.
list是用array存储的, 这句话有点说的不严谨. 准确的说应该是list接口规定list必须支持toArray().和该list本身的存储方式是不相干的. 而代码中对于新的list也是使用迭代器进行填充的.
逗泥丸的平方 2017-04-14
  • 打赏
  • 举报
回复
那么也就是说只能对集合的具体类的Arraylist和LinkedList这两种类型进行排序 这就不开心了 . 实现list的多了去了. 你自己写个list也是ok的呀. list是用array存储的, 其实这个排序也就是给array排序. Arrays.sort(a); 显然Collection下其他的集合就都不行了.比如set里面装了个map. 至于 Comparator<? super T> c 这就是个比较器啊. 问号 是看你传什么类型了. 就是要你重新定义一下比较规则. 比如你传student,按年龄排序, 那就在里面写上年龄相关的排序规则就好了. 什么+1,0,-1之类的就是大小规则.. 这个 比较器的<? super T> 是针对你list<?>使用的类型来讲的. 建议你去看 一下Arrays.sort的代码 当然最好从collections.sort开始看.

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧