天天看点

《黑马程序员》 TreeSet集合练习之 按照字符串长度排序

public class TreeSetTest {
	/**
	 * 按照字符串长度排序
	 */
	public static void main(String[] args) {
		TreeSet ts=new TreeSet(new MyComp2());
		ts.add("abcd");
		ts.add("baca");
		ts.add("aead");
		ts.add("cc");
		ts.add("z");
		ts.add("hahaha");
		ts.add("hag");
		Iterator ite=ts.iterator();
		while(ite.hasNext()){
			String s=(String)ite.next();
			System.out.println(s);
		}
	}
}

//主要条件满足时再判断一下次要条件
class MyComp2 implements Comparator{
	/*@Override
	public int compare(Object o1,Object o2){
		if(!(o1 instanceof String && o2 instanceof String))
			throw new RuntimeException("实例对象不符");
		String s1=(String)o1;
		String s2=(String)o2;
		if(s1.length()>s2.length())
			return -1;
		if(s1.length()==s2.length()){  //除了要判断字符串长度以外还要判断字符串
//			return 0;
			return s1.compareTo(s2);  //按照字符串进行比较一次
		}
		return 1;
	}  第一种方式*/
	
	//第二种方式
	@Override
	public int compare(Object o1,Object o2){
		if(!(o1 instanceof String && o2 instanceof String))
			throw new RuntimeException("实例对象不符");
		String s1=(String)o1;
		String s2=(String)o2;
		//Integer包装类也可以进行比较的
		//我们使用它来比较两个字符串的长度然后将返回值直接返回
		int num=new Integer(s1.length()).compareTo(new Integer(s2.length()));
		if(num==0)
			return s1.compareTo(s2);  //如果长度=0则让两个字符串进行比较。这个是按字典的顺序进行比较的
		return num;
	}
}