Java 从Set里面取出有序的记录详解及实例
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 + ", /r/n username = " + username         + ", /r/n 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 + ", /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;   }  } 运行结果:
-----------------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----------------------
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
新闻热点
疑难解答
图片精选