您的位置:首页 > 其它

从Set里面取出有序的记录

2016-01-05 19:07 344 查看
Set里面的记录是无序的。假设想使用Set,然后又想里面的记录是有序的,就能够使用TreeSet。而不是HashSet。在使用TreeSet的时候,里面的元素必须是实现了Comparable接口的,TreeSet在进行排序的时候就是通过比較它们的Comparable接口的实现。

以下是HashSet的无序和TreeSet的有序的比較:

Test类:

Java代码



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类:

Java代码



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类:

Java代码



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;

}

}

执行结果:

Hello代码



-----------------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----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: