首页 > 开发 > Java > 正文

Java 从Set里面取出有序的记录详解及实例

2024-07-13 10:08:57
字体:
来源:转载
供稿:网友

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

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表