Set里面的记录是无序的。假设想使用Set,然后又想里面的记录是有序的,就能够使用TreeSet。而不是HashSet。在使用TreeSet的时候,里面的元素必须是实现了Comparable接口的,TreeSet在进行排序的时候就是通过比較它们的Comparable接口的实现。
以下是HashSet的无序和TreeSet的有序的比較:
Test类:
- 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类:
- 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 + ", username = " + username
- + ", password = " + password;
- }
- }
User2类:
- 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 + ", username = " + username
- + ", 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;
- }
- }
执行结果:
- -----------------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----------------------