Set里面的记录是无序的,如果想使用Set,然后又想里面的记录是有序的,就可以使用TreeSet,而不是HashSet,在使用TreeSet的时候,里面的元素必须是实现了Comparable接口的,TreeSet在进行排序的时候就是通过比较它们的Comparable接口的实现!
下面是HashSet的无序和TreeSet的有序的比较:
Test类:
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
51
|
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class Test {
public static void main(String args[]) {
useHashSet();
useTreeSet();
}
/**
* Set默认是无序的,一般从Set里面拿出来的数据每次的顺序都会是不一样的,如果想里面的顺序一样
* 就使用TreeSet
*/
public static void useHashSet() {
System.out.println( "-----------------HashSet Start------------------" );
Set<User> set = new HashSet<User>();
for ( int i = 0 ; i < 10 ; i++) {
User user = new User((i + 1 ), "uname" + (i + 1 ), "pswd" + (i + 1 ));
set.add(user);
}
Iterator<User> iter = set.iterator();
while (iter.hasNext())
System.out.println(iter.next());
System.out.println( "------------------HashSet End----------------------" );
}
/**
* TreeSet是有序的,TreeSet在给里面的元素排序是通过它们的Comparable接口的实现来比较的,所以,
* 如果里面的对象没有实现Comparable接口,则TreeSet在运行时就会报错,所以如果想从Set里面拿出来的数据是
* 有序的就得使里面的对象实现Comparable接口,User2是实现了Comparable接口的,并对它们的id进行比较,id大
* 的就会排在后面
*/
public static void useTreeSet() {
System.out.println( "-----------------TreeSet Start------------------" );
Set<User2> set = new TreeSet<User2>();
for ( int i = 0 ; i < 10 ; i++) {
User2 user = new User2((i + 1 ), "uname" + (i + 1 ), "pswd" + (i + 1 ));
set.add(user);
}
Iterator<User2> iter = set.iterator();
while (iter.hasNext())
System.out.println(iter.next());
System.out.println( "------------------TreeSet End----------------------" );
}
}
|
User类:
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
public class User {
private int id;
private String username;
private String password;
public User() {
}
public User( int id, String username, String password) {
this .id = id;
this .username = username;
this .password = password;
}
public int getId() {
return id;
}
public void setId( int id) {
this .id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this .username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this .password = password;
}
@Override
public int hashCode() {
final int prime = 31 ;
int result = 1 ;
result = prime * result + id;
return result;
}
@Override
public boolean equals(Object obj) {
if ( this == obj)
return true ;
if (obj == null )
return false ;
if (getClass() != obj.getClass())
return false ;
User other = (User) obj;
if (id != other.id)
return false ;
return true ;
}
@Override
public String toString() {
return " id = " + id + ", \r\n username = " + username
+ ", \r\n password = " + password;
}
}
|
User2类:
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
public class User2 implements Comparable<User2> {
private int id;
private String username;
private String password;
public User2() {
}
public User2( int id, String username, String password) {
this .id = id;
this .username = username;
this .password = password;
}
public int getId() {
return id;
}
public void setId( int id) {
this .id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this .username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this .password = password;
}
@Override
public int hashCode() {
final int prime = 31 ;
int result = 1 ;
result = prime * result + id;
return result;
}
@Override
public boolean equals(Object obj) {
if ( this == obj)
return true ;
if (obj == null )
return false ;
if (getClass() != obj.getClass())
return false ;
User2 other = (User2) obj;
if (id != other.id)
return false ;
return true ;
}
@Override
public String toString() {
return " id = " + id + ", \r\n username = " + username
+ ", \r\n password = " + password;
}
@Override
public int compareTo(User2 user) {
// TODO Auto-generated method stub
//这里我的实现是按照id进行排序
if (user == null )
return 1 ;
if (id > user.getId())
return 1 ;
else if (id == user.getId())
return 0 ;
else
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
-----------------HashSet Start------------------
id = 3 ,
username = uname3,
password = pswd3
id = 4 ,
username = uname4,
password = pswd4
id = 1 ,
username = uname1,
password = pswd1
id = 2 ,
username = uname2,
password = pswd2
id = 7 ,
username = uname7,
password = pswd7
id = 8 ,
username = uname8,
password = pswd8
id = 5 ,
username = uname5,
password = pswd5
id = 6 ,
username = uname6,
password = pswd6
id = 9 ,
username = uname9,
password = pswd9
id = 10 ,
username = uname10,
password = pswd10
------------------HashSet End----------------------
-----------------TreeSet Start------------------
id = 1 ,
username = uname1,
password = pswd1
id = 2 ,
username = uname2,
password = pswd2
id = 3 ,
username = uname3,
password = pswd3
id = 4 ,
username = uname4,
password = pswd4
id = 5 ,
username = uname5,
password = pswd5
id = 6 ,
username = uname6,
password = pswd6
id = 7 ,
username = uname7,
password = pswd7
id = 8 ,
username = uname8,
password = pswd8
id = 9 ,
username = uname9,
password = pswd9
id = 10 ,
username = uname10,
password = pswd10
------------------TreeSet End----------------------
|
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
原文链接:http://blog.csdn.net/elim168/article/details/40586219