首页 > 代码库 > 从Set里面取出有序的记录
从Set里面取出有序的记录
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----------------------
从Set里面取出有序的记录
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。