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);
}
}
java 集合框架-TreeSet练习
最新推荐文章于 2020-11-09 15:13:39 发布