从Set里面取出有序的记录

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

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

 

 

 

 

 

 

目录
相关文章
|
1天前
|
存储 Java API
【数据结构】map&set详解
本文详细介绍了Java集合框架中的Set系列和Map系列集合。Set系列包括HashSet(哈希表实现,无序且元素唯一)、LinkedHashSet(保持插入顺序的HashSet)、TreeSet(红黑树实现,自动排序)。Map系列为双列集合,键值一一对应,键不可重复,值可重复。文章还介绍了HashMap、LinkedHashMap、TreeMap的具体实现与应用场景,并提供了面试题示例,如随机链表复制、宝石与石头、前K个高频单词等问题的解决方案。
14 6
【数据结构】map&set详解
|
3月前
|
Go
go语言map、实现set
go语言map、实现set
|
1月前
|
存储 安全 Java
java集合框架复习----(4)Map、List、set
这篇文章是Java集合框架的复习总结,重点介绍了Map集合的特点和HashMap的使用,以及Collections工具类的使用示例,同时回顾了List、Set和Map集合的概念和特点,以及Collection工具类的作用。
java集合框架复习----(4)Map、List、set
|
30天前
|
Java
【Java集合类面试二十二】、Map和Set有什么区别?
该CSDN博客文章讨论了Map和Set的区别,但提供的内容摘要并未直接解释这两种集合类型的差异。通常,Map是一种键值对集合,提供通过键快速检索值的能力,而Set是一个不允许重复元素的集合。
|
1月前
|
存储 JavaScript 前端开发
ES6新特性(四): Set 和 Map
ES6新特性(四): Set 和 Map
|
29天前
|
存储 Java 索引
|
2月前
|
C++ 容器
【C++】map和set封装
【C++】map和set封装
28 2
|
2月前
|
存储 C++ 容器
【C++】map和set深度讲解(下)
【C++】map和set深度讲解(下)
52 2
|
2月前
|
存储 自然语言处理 Java
【C++】map和set深度讲解(上)
【C++】map和set深度讲解(上)
33 2
|
2月前
|
存储 JavaScript 前端开发
JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】(二)
JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】(二)
37 1