黑马程序员技术交流社区

标题: TreeSet排序问题? [打印本页]

作者: 董志超    时间: 2012-10-28 07:02
标题: TreeSet排序问题?
TreeSet可以对其集合中的元素进行排序,保证元素唯一性的依据是compareTo方法,return 0;
TreeSet排序的第一种方式是让元素自身具备比较性,实现Comparable接口,覆盖compareTo方法。
第二种方法是比较器,实现Comparator接口,覆盖compare方法。
问题:当集合中的元素是一些整数,整数包括奇数和偶数是,我要奇数在前,偶数在后,奇数升序,偶数降序。
        集合中再有一些字母组成的字符串呢?让字符串在数字之前,按字符串长度排序。
比较复杂,怎么办?
作者: 崔政    时间: 2012-10-29 19:32
TreeSet排序无非两种,一是实现Comparable 二是实现Comparator,让类成为比较器
当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序。

Comparator
强行对某个对象collection进行整体排序的比较函数,可以将Comparator传递给Collections.sort或Arrays.sort。

Comparable
强行对实现它的每个类的对象进行整体排序,实现此接口的对象列表(和数组)可以通过Collections.sort或Arrays.sort进行自动排序。

Comparator和Comparable的区别
一个类实现了Camparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。
Comparator可以看成一种算法的实现,将算法和数据分离,Comparator也可以在下面两种环境下使用:
1、类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身
2、可以使用多种排序标准,比如升序、降序等






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