首页 > 代码库 > 从Set里面取出有序的记录

从Set里面取出有序的记录

Set里面的记录是无序的,如果想使用Set,然后又想里面的记录是有序的,就可以使用TreeSet,而不是HashSet,在使用TreeSet的时候,里面的元素必须是实现了Comparable接口的,TreeSet在进行排序的时候就是通过比较它们的Comparable接口的实现!

 

下面是HashSet的无序和TreeSet的有序的比较:

 

Test类:

Java代码
 收藏代码
  1. import java.util.HashSet;  
  2. import java.util.Iterator;  
  3. import java.util.Set;  
  4. import java.util.TreeSet;  
  5.   
  6. public class Test {  
  7.   
  8.     public static void main(String args[]) {  
  9.           
  10.         useHashSet();  
  11.         useTreeSet();  
  12.           
  13.     }  
  14.   
  15.     /** 
  16.      * Set默认是无序的,一般从Set里面拿出来的数据每次的顺序都会是不一样的,如果想里面的顺序一样 
  17.      * 就使用TreeSet 
  18.      */  
  19.     public static void useHashSet() {  
  20.         System.out.println("-----------------HashSet Start------------------");  
  21.         Set<User> set = new HashSet<User>();  
  22.         for (int i = 0; i < 10; i++) {  
  23.             User user = new User((i + 1), "uname" + (i + 1), "pswd" + (i + 1));  
  24.             set.add(user);  
  25.         }  
  26.         Iterator<User> iter = set.iterator();  
  27.         while (iter.hasNext())  
  28.             System.out.println(iter.next());  
  29.         System.out.println("------------------HashSet End----------------------");  
  30.     }  
  31.   
  32.     /** 
  33.      * TreeSet是有序的,TreeSet在给里面的元素排序是通过它们的Comparable接口的实现来比较的,所以, 
  34.      * 如果里面的对象没有实现Comparable接口,则TreeSet在运行时就会报错,所以如果想从Set里面拿出来的数据是 
  35.      * 有序的就得使里面的对象实现Comparable接口,User2是实现了Comparable接口的,并对它们的id进行比较,id大 
  36.      * 的就会排在后面 
  37.      */  
  38.     public static void useTreeSet() {  
  39.         System.out.println("-----------------TreeSet Start------------------");  
  40.         Set<User2> set = new TreeSet<User2>();  
  41.         for (int i = 0; i < 10; i++) {  
  42.             User2 user = new User2((i + 1), "uname" + (i + 1), "pswd" + (i + 1));  
  43.             set.add(user);  
  44.         }  
  45.         Iterator<User2> iter = set.iterator();  
  46.         while (iter.hasNext())  
  47.             System.out.println(iter.next());  
  48.         System.out.println("------------------TreeSet End----------------------");  
  49.     }  
  50.   
  51. }  

 

User类:

Java代码
 收藏代码
  1. public class User {  
  2.   
  3.     private int id;  
  4.     private String username;  
  5.     private String password;  
  6.   
  7.     public User() {  
  8.     }  
  9.   
  10.     public User(int id, String username, String password) {  
  11.         this.id = id;  
  12.         this.username = username;  
  13.         this.password = password;  
  14.     }  
  15.   
  16.     public int getId() {  
  17.         return id;  
  18.     }  
  19.   
  20.     public void setId(int id) {  
  21.         this.id = id;  
  22.     }  
  23.   
  24.     public String getUsername() {  
  25.         return username;  
  26.     }  
  27.   
  28.     public void setUsername(String username) {  
  29.         this.username = username;  
  30.     }  
  31.   
  32.     public String getPassword() {  
  33.         return password;  
  34.     }  
  35.   
  36.     public void setPassword(String password) {  
  37.         this.password = password;  
  38.     }  
  39.   
  40.     @Override  
  41.     public int hashCode() {  
  42.         final int prime = 31;  
  43.         int result = 1;  
  44.         result = prime * result + id;  
  45.         return result;  
  46.     }  
  47.   
  48.     @Override  
  49.     public boolean equals(Object obj) {  
  50.         if (this == obj)  
  51.             return true;  
  52.         if (obj == null)  
  53.             return false;  
  54.         if (getClass() != obj.getClass())  
  55.             return false;  
  56.         User other = (User) obj;  
  57.         if (id != other.id)  
  58.             return false;  
  59.         return true;  
  60.     }  
  61.   
  62.     @Override  
  63.     public String toString() {  
  64.         return " id = " + id + ", \r\n username = " + username  
  65.                 + ", \r\n password = " + password;  
  66.     }  
  67.   
  68. }  

 

 

User2类:

Java代码
 收藏代码
  1. public class User2 implements Comparable<User2> {  
  2.   
  3.     private int id;  
  4.     private String username;  
  5.     private String password;  
  6.   
  7.     public User2() {  
  8.     }  
  9.   
  10.     public User2(int id, String username, String password) {  
  11.         this.id = id;  
  12.         this.username = username;  
  13.         this.password = password;  
  14.     }  
  15.   
  16.     public int getId() {  
  17.         return id;  
  18.     }  
  19.   
  20.     public void setId(int id) {  
  21.         this.id = id;  
  22.     }  
  23.   
  24.     public String getUsername() {  
  25.         return username;  
  26.     }  
  27.   
  28.     public void setUsername(String username) {  
  29.         this.username = username;  
  30.     }  
  31.   
  32.     public String getPassword() {  
  33.         return password;  
  34.     }  
  35.   
  36.     public void setPassword(String password) {  
  37.         this.password = password;  
  38.     }  
  39.   
  40.     @Override  
  41.     public int hashCode() {  
  42.         final int prime = 31;  
  43.         int result = 1;  
  44.         result = prime * result + id;  
  45.         return result;  
  46.     }  
  47.   
  48.     @Override  
  49.     public boolean equals(Object obj) {  
  50.         if (this == obj)  
  51.             return true;  
  52.         if (obj == null)  
  53.             return false;  
  54.         if (getClass() != obj.getClass())  
  55.             return false;  
  56.         User2 other = (User2) obj;  
  57.         if (id != other.id)  
  58.             return false;  
  59.         return true;  
  60.     }  
  61.   
  62.     @Override  
  63.     public String toString() {  
  64.         return " id = " + id + ", \r\n username = " + username  
  65.                 + ", \r\n password = " + password;  
  66.     }  
  67.   
  68.     @Override  
  69.     public int compareTo(User2 user) {  
  70.         // TODO Auto-generated method stub  
  71.         //这里我的实现是按照id进行排序  
  72.         if (user == null)  
  73.             return 1;  
  74.         if (id > user.getId())  
  75.             return 1;  
  76.         else if (id == user.getId())  
  77.             return 0;  
  78.         else   
  79.             return -1;  
  80.     }  
  81.   
  82. }  

 

运行结果:

Hello代码
 收藏代码
  1. -----------------HashSet Start------------------  
  2.  id = 3,   
  3.  username = uname3,   
  4.  password = pswd3  
  5.  id = 4,   
  6.  username = uname4,   
  7.  password = pswd4  
  8.  id = 1,   
  9.  username = uname1,   
  10.  password = pswd1  
  11.  id = 2,   
  12.  username = uname2,   
  13.  password = pswd2  
  14.  id = 7,   
  15.  username = uname7,   
  16.  password = pswd7  
  17.  id = 8,   
  18.  username = uname8,   
  19.  password = pswd8  
  20.  id = 5,   
  21.  username = uname5,   
  22.  password = pswd5  
  23.  id = 6,   
  24.  username = uname6,   
  25.  password = pswd6  
  26.  id = 9,   
  27.  username = uname9,   
  28.  password = pswd9  
  29.  id = 10,   
  30.  username = uname10,   
  31.  password = pswd10  
  32. ------------------HashSet End----------------------  
  33. -----------------TreeSet Start------------------  
  34.  id = 1,   
  35.  username = uname1,   
  36.  password = pswd1  
  37.  id = 2,   
  38.  username = uname2,   
  39.  password = pswd2  
  40.  id = 3,   
  41.  username = uname3,   
  42.  password = pswd3  
  43.  id = 4,   
  44.  username = uname4,   
  45.  password = pswd4  
  46.  id = 5,   
  47.  username = uname5,   
  48.  password = pswd5  
  49.  id = 6,   
  50.  username = uname6,   
  51.  password = pswd6  
  52.  id = 7,   
  53.  username = uname7,   
  54.  password = pswd7  
  55.  id = 8,   
  56.  username = uname8,   
  57.  password = pswd8  
  58.  id = 9,   
  59.  username = uname9,   
  60.  password = pswd9  
  61.  id = 10,   
  62.  username = uname10,   
  63.  password = pswd10  
  64. ------------------TreeSet End----------------------  

 

从Set里面取出有序的记录