import java.util.*; /* 练习:按照字符串长度排序。 字符串本身具备比较性,但是它的比较方式不是所需要的。这时就只能使用比较器 注意:在方式二中: int num=new Integer(str1.length()).compareTo(new Integer(str2.length())); 此时num的值有三种可能。正数、负数、零。千万不要写下面的代码: if(num==1) return 1; num不一定等于1。我们在函数中返回的0,1,-1只是代表三种情况:零,正数,负数。这个一定要注意。 */ class MyCompare implements Comparator //自定义比较器 { public int compare(Object obj1,Object obj2) { if(!(obj1 instanceof String) || !(obj2 instanceof String)) throw new RuntimeException("不是字符串!"); String str1=(String)obj1; String str2=(String)obj2; /*方式一 if(str1.length()>str2.length()) return 1; if(str1.length()==str2.length()) { return str1.compareTo(str2); } return -1; */ /*方式二*/ int num=new Integer(str1.length()).compareTo(new Integer(str2.length())); if (num==0) { return str1.compareTo(str2); } return num; } } //如果没有上面的自定义类,那么TreeSet会按照自然顺序进行排序(字符串的字母自然排序) class TreeSetTest1 { public static void main(String[] args) { TreeSet ts=new TreeSet(new MyCompare()); //TreeSet ts=new TreeSet(); ts.add("abcd"); ts.add("dgf"); ts.add("aakuop"); ts.add("po"); ts.add("hello"); ts.add("hello"); ts.add("world"); ts.add("werttif"); ts.add("hello"); Iterator it=ts.iterator(); while(it.hasNext()) { sop((String)it.next()); } } public static void sop(Object obj) { System.out.println(obj); } }
时间: 2024-10-28 19:52:37