Java中TreeSet的用法

        Java中 TreeMap和TreeSet算是java集合类里面比较有难度的数据结构。和普通的HashMap不一样,普通的HashMap元素存取的时间复杂度一般是O(1)的范围,而TreeMap内部对元素的操作复杂度为O(logn)。

        虽然在元素的存取方面TreeMap并不占优,但是它内部的元素都是排序的,当需要查找某些元素以及顺序输出元素的时候它能够带来比较理想的结果。可以说,TreeMap是一个内部元素排序版的HashMap。同样,TreeSet是一个封装了一个HashSet的成员变量来实现的,底层运用了红黑树的数据结构。

这里主要展现TreeSet的两种常用方法:

示例一:

  1. public class TreeSetTest {  
  2.     public static void main(String[] args) {  
  3.         Set<String> set = new TreeSet<String>();  
  4.         set.add("abc");  
  5.         set.add("xyz");  
  6.         set.add("rst");  
  7.           
  8.         System.out.println(set);//可以直接输出  
  9.           
  10.         Iterator itSet = set.iterator();//也可以遍历输出  
  11.         while(itSet.hasNext())  
  12.             System.out.print(itSet.next() + "\t");  
  13.         System.out.println();  
  14.     }  
  15. }  
public class TreeSetTest {
	public static void main(String[] args) {
		Set<String> set = new TreeSet<String>();
		set.add("abc");
		set.add("xyz");
		set.add("rst");
		
		System.out.println(set);//可以直接输出
		
		Iterator itSet = set.iterator();//也可以遍历输出
		while(itSet.hasNext())
			System.out.print(itSet.next() + "\t");
		System.out.println();
	}
}

输出结果为:

  1. [abc, rst, xyz]  
  2. abc rst xyz  
[abc, rst, xyz]
abc	rst	xyz


示例二:

  1. //自定义数据类型,并在自定义的数据类型中实现CompareTo方法    
  2. class Teacher implements Comparable {    
  3.     int num;    
  4.     String name;    
  5.     
  6.     Teacher(String name, int num) {    
  7.         this.num = num;    
  8.         this.name = name;    
  9.     }    
  10.     
  11.     public String toString() {    
  12.         return "学号:" + num + " 姓名:" + name;    
  13.     }    
  14.     
  15.     public int compareTo(Object o) {    
  16.         Teacher ss = (Teacher) o;    
  17.         int result = num > ss.num ? 1 : (num == ss.num ? 0 : -1);    
  18.         if (result == 0) {    
  19.             result = name.compareTo(ss.name);    
  20.         }    
  21.         return result;    
  22.     }    
  23. }    
  24.     
  25. public class TreeSetTest {    
  26.     public static void main(String[] args) {            
  27.         Set<Teacher> treeSet = new TreeSet<Teacher>();    
  28.         treeSet.add(new Teacher("zhangsan"2));    
  29.         treeSet.add(new Teacher("lisi"1));    
  30.         treeSet.add(new Teacher("wangwu"3));    
  31.         treeSet.add(new Teacher("mazi"3));   
  32.           
  33.         System.out.println(treeSet);//直接输出  
  34.           
  35.         Iterator itTSet = treeSet.iterator();//遍历输出  
  36.         while(itTSet.hasNext())    
  37.             System.out.print(itTSet.next() + "\t");    
  38.         System.out.println();    
  39.     }     
  40. }    
//自定义数据类型,并在自定义的数据类型中实现CompareTo方法  
class Teacher implements Comparable {  
    int num;  
    String name;  
  
    Teacher(String name, int num) {  
        this.num = num;  
        this.name = name;  
    }  
  
    public String toString() {  
        return "学号:" + num + " 姓名:" + name;  
    }  
  
    public int compareTo(Object o) {  
        Teacher ss = (Teacher) o;  
        int result = num > ss.num ? 1 : (num == ss.num ? 0 : -1);  
        if (result == 0) {  
            result = name.compareTo(ss.name);  
        }  
        return result;  
    }  
}  
  
public class TreeSetTest {  
    public static void main(String[] args) {          
        Set<Teacher> treeSet = new TreeSet<Teacher>();  
        treeSet.add(new Teacher("zhangsan", 2));  
        treeSet.add(new Teacher("lisi", 1));  
        treeSet.add(new Teacher("wangwu", 3));  
        treeSet.add(new Teacher("mazi", 3)); 
		
        System.out.println(treeSet);//直接输出
		
        Iterator itTSet = treeSet.iterator();//遍历输出
        while(itTSet.hasNext())  
            System.out.print(itTSet.next() + "\t");  
        System.out.println();  
    }   
}  
输出结果为:
  1. [学号:1 姓名:lisi, 学号:2 姓名:zhangsan, 学号:3 姓名:mazi, 学号:3 姓名:wangwu]  
  2. 学号:1 姓名:lisi    学号:2 姓名:zhangsan    学号:3 姓名:mazi    学号:3 姓名:wangwu    
[学号:1 姓名:lisi, 学号:2 姓名:zhangsan, 学号:3 姓名:mazi, 学号:3 姓名:wangwu]
学号:1 姓名:lisi	学号:2 姓名:zhangsan	学号:3 姓名:mazi	学号:3 姓名:wangwu	



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值