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

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值