黑马程序员--java集合TreeSet

-------android培训java培训、期待与您交流!     ---------- 

»知识点总结

1.TreeSet:可以对Set集合中的元素进行排序。
 底层数据结构是二叉树。
 保证元素唯一性的依据: compareTo方法return 0.

2. TreeSet排序的第一种方式:让元素自身具备比较性。
 元素需要实现Comparable接口,覆盖compareTo方法。
 也种方式也成为元素的自然顺序,或者叫做默认顺序。

3. TreeSet的第二种排序方式。
 当元素自身不具备比较性时,或者具备的比较性不是所需要的。
 这时就需要让集合自身具备比较性。
 在集合初始化时,就有了比较方式。

代码练习

public static void main(String[] args)
	{	
		//"90 -7 0 18 2 45 4" 将字符串中的数值进行排序。使用TreeSet完成。
		String str = "90 -7 0 18 2 45 4";
		String[] ss = str.split(" ");
		TreeSet ts6 = new TreeSet();
		for(String s : ss)
		{
			ts6.add(Integer.parseInt(s));
		}
		String str2 = ts6.toString();
		String str3 = str2.replace(",", " ");
		//str3= str3.replace((CharSequence) new Regexp("[\\[\\]]"), "");
		A.print(str3);
	
		String[] chs = str.split(" ");
		TreeSet ts5 = new TreeSet(new Comparator(){

			@Override
			public int compare(Object o1, Object o2)
			{	
				Integer i1 = new Integer((String)o1);
				Integer i2 = new Integer((String)o2);
				
				return i1.compareTo(i2);
			}
			
		});
		for(String s : chs)
		{
			ts5.add(s);
		}
		Object[] strArr =  ts5.toArray();
		StringBuilder sb = new StringBuilder();
		for(int i=0, len=strArr.length; i<len; i++)
		{
			String str1 = (String) strArr[i];
			sb.append(str1);
			if(i<len-1)
				sb.append(" ");
		}
		String str2 = sb.toString();
		A.print("-"+str2+"-");
		
		//按照字符串长度排序
		TreeSet ts4 = new TreeSet(new Comparator(){

			@Override
			public int compare(Object o1, Object o2)
			{	
				String s1 = (String)o1;
				String s2 = (String)o2;
				
				int r = new Integer(s1.length()).compareTo(new Integer(s2.length()));
				if(r != 0)
					return r;
				return s1.compareTo(s2);
			}
			
		});
		ts4.add("aa");
		ts4.add("x");
		ts4.add("ab");
		ts4.add("bcd");
		ts4.add("ac");
		A.print(ts4);
		
		//TreeSet ts3 = new TreeSet(new StudentComparator());
		TreeSet ts3 = new TreeSet();
		ts3.add(new Student("w1", 20));
		ts3.add(new Student("w2", 30));
		ts3.add(new Student("w3", 20));
		//ts3.add(new Student("w2", 20));
		A.print(ts3);
		
		TreeSet ts2 = new TreeSet();
		ts2.add(new Student("w1", 20));
		ts2.add(new Student("w2", 30));
		ts2.add(new Student("w3", 40));
		ts2.add(new Student("w1", 20));
		ts2.add(new Student("w4", 40));
		for(Iterator it=ts2.iterator(); it.hasNext();)
		{
			A.print(it.next());
		}
		
	
	}

}

class StudentComparator implements Comparator
{

	@Override
	public int compare(Object o1, Object o2)
	{	
		Student s1 = (Student)o1;
		Student s2 = (Student)o2;
		A.print(s1.getName()+"-->"+s2.getName());
		int r = s2.getName().compareTo(s1.getName());
		if(r!=0)
			return r;
		return new Integer(s2.getAge()).compareTo(new Integer(s1.getAge()));
	}
	//不实现总是安全的,提高效率
	@Override
	public boolean equals(Object obj)
	{
		// TODO Auto-generated method stub
		return super.equals(obj);
	}
	
}
------- android培训 java培训 、期待与您交流!     ---------- 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值