从Set里面取出有序的记录

it2022-05-08  6

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

 

转载于:https://www.cnblogs.com/gcczhongduan/p/5103517.html


最新回复(0)