黑马程序员技术交流社区

标题: 关于类Collections中sort方法排序问题求解...... [打印本页]

作者: 刘俊佳    时间: 2012-7-25 21:13
标题: 关于类Collections中sort方法排序问题求解......
本帖最后由 刘俊佳 于 2012-7-26 08:35 编辑

这是代码:

package collection;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
public class CollectionsDemo
{
public static void main(String[] args)
{
  sortDemo();
}
public static void sortDemo()
{
  Set<String> list=new TreeSet<String>();
  
  list.add("abcd");
  list.add("aaa");
  list.add("z");
  list.add("kkkkk");
  list.add("qq");
  list.add("z");
  sop(list);
  
  Collections.sort(list);
  
  sop(list);
   
}
public static void sop(Object obj)
{
  System.out.println(obj);
}
}
下面是打印错误信息,为什么sort能够对List集合中的元素排序而不能对Set集合中的元素进行排序啊?

OE`ROV{73EW2}]@$39QX6Q1.jpg (40.16 KB, 下载次数: 75)

OE`ROV{73EW2}]@$39QX6Q1.jpg

作者: 吴立杰    时间: 2012-7-25 21:48
楼猪,待会你仔细看下API,然后再自己练习一下,我就不给你贴代码了,Collections里sort排序的方法有两个,一个是操作list的,静态方法sort(List<T> list);
另一个是:sort(List<T> list, Comparator<? super T> c) ,传一个list集合,还有自定义比较器。方法里都明确了必须传list的了,就别传set类型的集合咯
对于set的排序,一般都是treeSet自定义比较器,自定义比较器的使用会不?不会另外问个问题,我给你回答吧。
作者: 彭盼    时间: 2012-7-25 21:53
API文档关于collections的方法sort:
sort(List<T> list) :根据元素的自然顺序 对指定列表按升序进行排序。
它已经限定只对List集合进行排序
作者: 吴立杰    时间: 2012-7-25 22:00
王艺霖 发表于 2012-7-25 21:45
collections  这个类的sort排序方法规定只能放list型的   上面的是源代码

都给分了 啊哈哈
作者: 肖琦    时间: 2012-7-25 22:03
Collections只提供了对List的排序方法,请参阅API,并且集合所装的元素必须实现Comparable接口。
你用的TreeSet底层实现是利用红黑树,它天生就支持排序,但装的元素要么实现Comparable接口,或者是在TreeSet实例化时创造一个实现Comparator接口的对象(此类实现了比较元素的compare()方法)当参数,不必使用Collections辅助的:
  1.                 TreeSet<String> ts = new TreeSet<String>();
  2.                 ts.add("3");
  3.                 ts.add("2");
  4.                 ts.add("1");
  5.                 ts.add("4");
  6.                 ts.add("5");
  7.                 for(String s : ts){
  8.                         System.out.println(s);
  9.                 }
  10.                
复制代码
String 本身实现了Comparable接口。



作者: 吴立杰    时间: 2012-7-26 00:05
王艺霖 发表于 2012-7-25 22:13
你好像是跟我一班的  在飞秋上看过你名字

……………………那个高个胖子,和金龙一起的,哎
作者: 刘俊佳    时间: 2012-7-26 08:34
谢谢楼上各位的解答,学习了,下次看API我会多注意点{:soso_e127:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2