zoukankan      html  css  js  c++  java
  • 从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 + ",   username = " + username  
    65.                 + ",   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 + ",   username = " + username  
    65.                 + ",   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----------------------  

     

  • 相关阅读:
    【转载】ESFramewor使用技巧(2)-- 在插件中使用NHibernate
    【转载】ESFramework介绍之(20)―― 插件自动升级
    [转载]我的架构经验小结(一)-- 常用的架构模型
    [转载]TCP服务器“拒绝服务攻击” 解决方案
    【转载】我的架构经验小结(三)-- 深入三层架构
    【转载】动态加载dll
    CSS3动画之一:Transitions功能
    CSS3中的transform变形
    [转载]插件开发
    【转载】服务器系统自动升级
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5103517.html
Copyright © 2011-2022 走看看