java 集合之TreeSet的用法

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

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

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


其中em2例子中的Comparable接口用法很重要;

em1:

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();  
    }  
}  
输出结果为:

[abc, rst, xyz]  
abc rst xyz  

em2:

//自定义数据类型,并在自定义的数据类型中实现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;    
    }    
    //按照num属性先排一次序,如果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));   
          //向TreeSet中添加的元素必须是同一类 
        System.out.println(treeSet);//直接输出  
          
        Iterator itTSet = treeSet.iterator();//遍历输出  
        while(itTSet.hasNext())    
            System.out.print(itTSet.next() + "\t");    
        System.out.println();    
    }     
}    
输出结果为:

[学号:1 姓名:lisi, 学号:2 姓名:zhangsan, 学号:3 姓名:mazi, 学号:3 姓名:wangwu]  
学号:1 姓名:lisi    学号:2 姓名:zhangsan    学号:3 姓名:mazi    学号:3 姓名:wangwu    


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值