* TreeSet:使用实现了Comparator接口的比较器对象进行比较----人工排序
* 实例:将字符串按照从短到长排序,长度相同再按照字典排序.
*
* 总结:对TreeSet有两种排序方法
* 1.实现Comparable接口的compareTo方法---系统排序
* 2.实现Comparator接口的compare方法---人工排序
*
* 系统让第二种排序的优先级高于第一种,方便人工排序的实现
package com.test;
import java.util.Comparator;
import java.util.TreeSet;
import java.util.concurrent.CancellationException;
public class Demo9 {
public static void main(String[] args) {
/*
* TreeSet:使用实现了Comparator接口的比较器对象进行比较----人工排序
* 实例:将字符串按照从短到长排序,长度相同再按照字典排序.
*
* 总结:对TreeSet有两种排序方法
* 1.实现Comparable接口的compareTo方法---系统排序
* 2.实现Comparator接口的compare方法---人工排序
*
* 系统让第二种排序的优先级高于第一种,方便人工排序的实现
*/
//第2步.创建比较器对象
ComWithLength comWithLength=new ComWithLength();
//第3步.将比较器对象TreeSet
TreeSet set =new TreeSet<>(comWithLength);
set.add("java12");
set.add("java123");
set.add("java1234");
set.add("java1");
set.add("java456");
System.out.println(set);//[java1, java12, java123, java456, java1234]
}
}
//1.创建一个按照字符串长度比较的比较器
//自己设定比较规则
class ComWithLength implements Comparator{
@Override
public int compare(Object arg0, Object arg1) {
if (!(arg0 instanceof String)) {//判断arg0里是否包含String
throw new ClassCastException("类型转换错误");
}
if (!(arg1 instanceof String)) {
throw new ClassCastException("类型转换错误");
}
//向下转型
String string1=(String)arg0;
String string2=(String)arg1;
//将字符串按照从短到长排序,长度相同再按照字典排序.
int num=string1.length()-string2.length();
return num==0?string1.compareTo(string2):num;
}
}