TreeSet介绍

TreeSet介绍一、TreeSet原理:1.TreeSet存储对象的时候,可以排序,但是需要指定排序的算法2.Integer能排序(有默认顺序),String能排序(有默认顺序),自定义的类存储的时候出现异常(没有顺序)3.如果想把自定义类的对象存入TreeSet进行排序,那么必须实现Comparable接口,或者实现一个比较器     在类上implementComparable

一、TreeSet原理:

1.TreeSet存储对象的时候, 可以排序, 但是需要指定排序的算法

2.Integer能排序(有默认顺序), String能排序(有默认顺序), 自定义的类存储的时候出现异常(没有顺序)

3.如果想把自定义类的对象存入TreeSet进行排序, 那么必须实现Comparable接口,或者实现一个比较器

             在类上implements Comparable
             重写compareTo()方法
             在方法内定义比较算法, 根据大小关系, 返回正数负数或零
             在使用TreeSet存储对象的时候, add()方法内部就会自动调用compareTo()方法进行比较, 根据比较结果使用二叉树形式进行存储

4.TreeSet依靠TreeMap来实现

二、TreeSet实现有序的2种方式

1)、元素实现Comparable接口:

实例:

实体类User(实现Comparable接口):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

package
com.model.elgin.collections;


public
 
class
User
implements
Comparable<User>{

   
   

private
 
int
id;
   

private
 
String
name;
   

private
 
String
phone;
    
   

public
 
int
getId() {

       

return
id;
    }
   

public
 
void
setId(
int
id) {

       

this
.id = id;
    }
   

public
 
String
getName() {

       

return
name;
    }
   

public
 
void
setName(
String
name) {

       

this
.name = name;
    }
   

public
 
String
getPhone() {

       

return
phone;
    }
   

public
 
void
setPhone(
String
phone) {

       

this
.phone = phone;
    }
    
   

public
User(
int
id,
String
name,
String
phone) {

       

super
();
       

this
.id = id;
       

this
.name = name;
       

this
.phone = phone;
    }
    
    @Override
   

public
 
String
toString() {

       

return
 
“User [id=”
+ id +
“, name=”
+ name +
“, phone=”
+ phone +
“]”
;
    }
    
    @Override
   

public
 
int
compareTo(User user) {

       

if
(
this
.id>user.getId()){

           

return
 
1
;
        }

else
 
if
(
this
.id==user.getId()){

           

return
 
0
;
        }
       

return

1
;
    }
}

测试类:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

package
com.model.elgin.collections;


import
java.util.Set;

import
java.util.TreeSet;


public
 
class
TestTreeSet {

    
   

public
 
static
 
void
main(
String
[] args) {
        
       

/*
         * TreeSet有序、唯一。
         * 实现有序的2种方式:
         * 1.集合中的元素对象实现Comparable接口,TreeSet声明使用无参构造
         * 2.声明一个比较器 Comparator ,TreeSet声明使用有参构造,参数传入比较器的一个实例对象
         * 
         */


        Set<User> set=

new
TreeSet<User>();
        User user1=

new
User(
10
,
“jim”
,
“13232326565”
);
        User user2=

new
User(
20
,
“jack”
,
“13232326566”
);
        User user3=

new
User(
30
,
“lily”
,
“13232326567”
);
        User user4=

new
User(
40
,
“lucy”
,
“13232326568”
);
        User user5=

new
User(
40
,
“lucy”
,
“13232326568”
);
        set.add(user1);
        set.add(user3);
        set.add(user4);
        set.add(user2);
        set.add(user5);
        System.out.println(set);
    }
}

运行之后发现结果有序(根据id由小到大)排列

2)、通过自定义比较器实现(User类不需要实现Comparable接口):

比较器类: UserComparator

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

package
com.model.elgin.collections;


import
java.util.Comparator;


public
 
class
UserComparator
implements
Comparator<User> {

    @Override
   
public
 
int
compare(User user1, User user2) {

       

if
(user1.getId()>user2.getId()){

           

return
 
1
;
        }

else
 
if
(user1.getId()==user2.getId()){

           

return
 
0
;
        }
       

return

1
;
    }   
}

测试类:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

package
com.model.elgin.collections;


import
java.util.Comparator;

import
java.util.Set;

import
java.util.TreeSet;


public
 
class
TestTreeSet {

    
   

public
 
static
 
void
main(
String
[] args) {
        
       

/*
         * TreeSet有序、唯一。
         * 实现有序的2种方式:
         * 1.集合中的元素对象实现Comparable接口,TreeSet声明使用无参构造
         * 2.声明一个比较器 Comparator ,TreeSet声明使用有参构造,参数传入比较器的一个实例对象
         * 
         */


        Comparator<User> comparator=

new
UserComparator();
        Set<User> set=

new
TreeSet<User>(comparator);
        User user1=

new
User(
10
,
“jim”
,
“13232326565”
);
        User user2=

new
User(
20
,
“jack”
,
“13232326566”
);
        User user3=

new
User(
30
,
“lily”
,
“13232326567”
);
        User user4=

new
User(
40
,
“lucy”
,
“13232326568”
);
        User user5=

new
User(
40
,
“lucy”
,
“13232326568”
);
        set.add(user1);
        set.add(user3);
        set.add(user4);
        set.add(user2);
        set.add(user5);
        System.out.println(set);
    }
}

运行,同样可以得到上述有序的结果。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/35128.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注