软件编程
位置:首页>> 软件编程>> java编程>> Java 从Set里面取出有序的记录详解及实例

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

作者:lqh  发布时间:2021-07-08 09:07:33 

标签:java,Set

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

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

来源:http://blog.csdn.net/elim168/article/details/40586219

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com