码迷,mamicode.com
首页 > 其他好文 > 详细

ht-7 treeSet特性

时间:2018-07-30 23:33:35      阅读:268      评论:0      收藏:0      [点我收藏+]

标签:iterator   static   情况   添加   pac   map   collect   lse   重写   

TreeSet
TreeSet可以对set集合中的元素进行排序,默认按照asic码表的自然顺序排序,之所以treeset能排序是因为底层是二叉树,数据越多越慢,TreeSet是依靠TreeMap来实现的
像TreeSet中存储自定义对象需要实现comparable接口。

 

 1 package com.iotek.set;
 2 
 3 import java.util.Iterator;
 4 import java.util.TreeSet;
 5 
 6 public class TreeSetDemo1 {
 7 
 8     public static void main(String[] args) {
 9 
10         TreeSet<Personb> pset = new TreeSet<Personb>();
11         pset.add(new Personb("chenchen", 30));
12         pset.add(new Personb("lisi", 20));
13         pset.add(new Personb("wangwu", 10));
14         pset.add(new Personb("rose", 40));
15         pset.add(new Personb("rose", 41));
16         System.out.println(pset);
17         Iterator<Personb> it = pset.iterator(); //
18         while (it.hasNext()) { // 判断容器中有没有被迭代的数据
19             Personb p = it.next(); // 取出来的是个Person类型
20             System.out.println(p.getName() + "--" + p.getAge());
21         }
22 
23         /*
24          * 调用TreeSet类的对象pset的iterator()方法,返回一个迭代器对象, 使用这个迭代器对象
25          */
26 
27         /*
28          * (1)当Person类不实现Comparable接口时,System.out.println(pset)这条语句会报错:
29          * Exception in thread "main"java.lang.ClassCastException:
30          * com.iotek.set.Person cannot be cast to java.lang.Comparable
31          * 这是因为,TreeSet和TreeMap一样,都是按照键的自然顺序来升序排列,
32          * 对象无法做自然升序排列,应该要告诉TreeSet按照什么规则来排序
33          * (2)如何对TreeSet对象的add()方法中添加的对象进行排序?需要这个对象的类
34          * 来实现Comparable接口,在接口中重写compareTo()方法,来声明比比较规则
35          */
36     }
37 
38 }
39 
40 /*
41  * 当调用TreeSet的无参数构造方法,其内部创建了一个TreeMap对象 public TreeSet() { this(new
42  * TreeMap<E,Object>()); }
43  */
44 class Personb implements Comparable<Personb> {
45     private String name;
46     private int age;
47 
48     public Personb(String name, int age) {
49         super();
50         this.name = name;
51         this.age = age;
52         // this.age是Person类的实例化对象的age
53     }
54 
55     public String getName() {
56         return name;
57     }
58 
59     public void setName(String name) {
60         this.name = name;
61     }
62 
63     public int getAge() {
64         return age;
65     }
66 
67     public void setAge(int age) {
68         this.age = age;
69     }
70 
71     @Override
72     public int compareTo(Personb o) {
73         if (this.age - o.getAge() > 0) {
74             return 1;
75         } else if (this.age - o.getAge() < 0) {
76             return -1;
77         }
78         return 0;
79     }
80 
81     @Override
82     public String toString() {
83         return "Personb [name=" + name + ", age=" + age + "]";
84     }
85     
86 
87 }

技术分享图片

 

TreeSet及常用API
(1)TreeSet为使用树来进行存储的Set接口提供了一个工具,对象按升序存储,访问和检索很快
(2)在存储了大量的需要进行快速检索的排序信息的情况下,TreeSet是一个很好的选择
(3)构造方法
TreeSet()
TreeSet(Collection c)
TreeSet(Comparator comp)
TreeSet(SortedSet ss)

(4)总结 :TreeSet的内部操作的底层数据是TreeMap,只是我们操作的是TreeMap的Key
TreeMap的Key是默认按照自然顺序升序排列的

 

ht-7 treeSet特性

标签:iterator   static   情况   添加   pac   map   collect   lse   重写   

原文地址:https://www.cnblogs.com/enjoyjava/p/9393345.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!