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

 

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

 

Test类:


Java代码   从Set里面取出有序的记录_java代码


  1. import java.util.HashSet;
  2. import java.util.Iterator;
  3. import java.util.Set;
  4. import java.util.TreeSet;

  5. public class Test {

  6. public static void main(String args[]) {

  7. useHashSet();
  8. useTreeSet();

  9. }

  10. /**
  11. * Set默认是无序的,一般从Set里面拿出来的数据每次的顺序都会是不一样的,如果想里面的顺序一样
  12. * 就使用TreeSet
  13. */
  14. public static void useHashSet() {
  15. System.out.println("-----------------HashSet Start------------------");
  16. Set<User> set = new HashSet<User>();
  17. for (int i = 0; i < 10; i++) {
  18. User user = new User((i + 1), "uname" + (i + 1), "pswd" + (i + 1));
  19. set.add(user);
  20. }
  21. Iterator<User> iter = set.iterator();
  22. while (iter.hasNext())
  23. System.out.println(iter.next());
  24. System.out.println("------------------HashSet End----------------------");
  25. }

  26. /**
  27. * TreeSet是有序的,TreeSet在给里面的元素排序是通过它们的Comparable接口的实现来比较的,所以,
  28. * 如果里面的对象没有实现Comparable接口,则TreeSet在运行时就会报错,所以如果想从Set里面拿出来的数据是
  29. * 有序的就得使里面的对象实现Comparable接口,User2是实现了Comparable接口的,并对它们的id进行比较,id大
  30. * 的就会排在后面
  31. */
  32. public static void useTreeSet() {
  33. System.out.println("-----------------TreeSet Start------------------");
  34. Set<User2> set = new TreeSet<User2>();
  35. for (int i = 0; i < 10; i++) {
  36. User2 user = new User2((i + 1), "uname" + (i + 1), "pswd" + (i + 1));
  37. set.add(user);
  38. }
  39. Iterator<User2> iter = set.iterator();
  40. while (iter.hasNext())
  41. System.out.println(iter.next());
  42. System.out.println("------------------TreeSet End----------------------");
  43. }

  44. }


 

User类:


Java代码   从Set里面取出有序的记录_java代码


  1. public class User {

  2. private int id;
  3. private String username;
  4. private String password;

  5. public User() {
  6. }

  7. public User(int id, String username, String password) {
  8. this.id = id;
  9. this.username = username;
  10. this.password = password;
  11. }

  12. public int getId() {
  13. return id;
  14. }

  15. public void setId(int id) {
  16. this.id = id;
  17. }

  18. public String getUsername() {
  19. return username;
  20. }

  21. public void setUsername(String username) {
  22. this.username = username;
  23. }

  24. public String getPassword() {
  25. return password;
  26. }

  27. public void setPassword(String password) {
  28. this.password = password;
  29. }

  30. @Override
  31. public int hashCode() {
  32. final int prime = 31;
  33. int result = 1;
  34. result = prime * result + id;
  35. return result;
  36. }

  37. @Override
  38. public boolean equals(Object obj) {
  39. if (this == obj)
  40. return true;
  41. if (obj == null)
  42. return false;
  43. if (getClass() != obj.getClass())
  44. return false;
  45. User other = (User) obj;
  46. if (id != other.id)
  47. return false;
  48. return true;
  49. }

  50. @Override
  51. public String toString() {
  52. return " id = " + id + ", \r\n username = " + username
  53. + ", \r\n password = " + password;
  54. }

  55. }


 

 

User2类:


Java代码   从Set里面取出有序的记录_java代码


  1. public class User2 implements Comparable<User2> {

  2. private int id;
  3. private String username;
  4. private String password;

  5. public User2() {
  6. }

  7. public User2(int id, String username, String password) {
  8. this.id = id;
  9. this.username = username;
  10. this.password = password;
  11. }

  12. public int getId() {
  13. return id;
  14. }

  15. public void setId(int id) {
  16. this.id = id;
  17. }

  18. public String getUsername() {
  19. return username;
  20. }

  21. public void setUsername(String username) {
  22. this.username = username;
  23. }

  24. public String getPassword() {
  25. return password;
  26. }

  27. public void setPassword(String password) {
  28. this.password = password;
  29. }

  30. @Override
  31. public int hashCode() {
  32. final int prime = 31;
  33. int result = 1;
  34. result = prime * result + id;
  35. return result;
  36. }

  37. @Override
  38. public boolean equals(Object obj) {
  39. if (this == obj)
  40. return true;
  41. if (obj == null)
  42. return false;
  43. if (getClass() != obj.getClass())
  44. return false;
  45. User2 other = (User2) obj;
  46. if (id != other.id)
  47. return false;
  48. return true;
  49. }

  50. @Override
  51. public String toString() {
  52. return " id = " + id + ", \r\n username = " + username
  53. + ", \r\n password = " + password;
  54. }

  55. @Override
  56. public int compareTo(User2 user) {
  57. // TODO Auto-generated method stub
  58. //这里我的实现是按照id进行排序
  59. if (user == null)
  60. return 1;
  61. if (id > user.getId())
  62. return 1;
  63. else if (id == user.getId())
  64. return 0;
  65. else
  66. return -1;
  67. }

  68. }


 

运行结果:


Hello代码   从Set里面取出有序的记录_java代码


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