`
234390216
  • 浏览: 10232454 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:462603
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1775477
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1398318
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:395004
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:679965
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:530859
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1183884
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:467833
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:151373
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:68130
社区版块
存档分类
最新评论

从Set里面取出有序的记录

    博客分类:
  • java
阅读更多

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
0
分享到:
评论
2 楼 234390216 2014-09-22  
bit1129 写道
TreeSet是线程安全的???别误导别人。

这里确实错了,多谢指正。
1 楼 bit1129 2014-09-22  
TreeSet是线程安全的???别误导别人。

相关推荐

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

    以下是对从Set中取出有序记录的详细解释: 1. **HashSet与TreeSet的区别**: - **无序性**:HashSet不保证元素的插入顺序,而TreeSet则按照元素的自然排序或自定义排序保持元素的顺序。 - **排序依据**:HashSet...

    java8从list集合中取出某一属性的值的集合案例

    Java8从List集合中取出某一属性的值的集合案例 Java8从List集合中取出某一属性的值的集合案例是一个非常有价值的知识点,主要介绍了如何使用Java8的流式编程从List集合中取出某一属性的值的集合。下面将详细介绍这...

    java取出mysql中数据,显示在jtable里面

    根据给定的文件信息,我们可以总结出以下关于如何使用Java从MySQL数据库中获取数据并在JTable中显示的相关知识点: ### 一、导入必要的库 在Java程序中操作MySQL数据库及Swing组件,需要导入以下几个包: 1. `java...

    Kettle循环获取结果集中的数据并传入转换里面

    在数据处理领域,Kettle(Pentaho Data Integration,PDI)是一款强大的ETL(Extract, Transform, Load)工具,它允许用户从多种数据源提取数据,并进行转换和加载到目标系统。本话题主要探讨如何在Kettle中实现循环...

    写入properties文件时间并且读出时间

    在Java编程中,`properties`文件是一个常用的配置文件格式,用于存储程序的配置信息,如数据库连接字符串、系统参数...在实际项目中,这样的功能可以应用于记录程序的启动时间、更新时间等,方便追踪和管理软件的状态。

    java大数据内容_5Mapreduce、数据挖掘

    1. **Map阶段**:从输入的行中取出访问日期(从访问时间里面处理出来,注意为了做到排序输出此处必须得使用时间戳格式,而不能用传统的format格式)和访问地址拼接作为key,并取出用户IP作为value。 - Map输出:...

    基于SIP开发软件电话的一些资源(转自YOUTOO)

    这时,我们再次编译我们的工程,顺利编译,生成osipparser2.dll,这时,网上很多文档里可能直接就说,这一步也会生成libs目录,里面里osipparser2.lib文件,但我们这里没有生成:) 最简单的方法,不用深究,直接...

    C#填充任意封闭区域(FloodFill)

    填充算法,也被称为“洪水填充”或Flood Fill,其基本思想是从给定的起始点开始,逐步改变相邻的颜色,直到整个封闭区域的颜色都被更新。这个过程通常用于图像编辑软件中,用户选择一个颜色并点击图像的一个像素,...

    SQL性能优化

     SQL在运行时先取出数个查询的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。  实际大部分应用中是不会产生重复的记录,推荐采用UNION ALL操作符...

    ChineseFramework大型WEB应用框架程序

    我发这个里面的实现只是一个例子. 让大家知道如何调用.. 2. 关于不好向PHP5移植, 我从没想过要移植到PHP5上. 因为如果要移值, 你敢说你的框架不要改.. 恐怕要改的也不在少数.就算你勉强凑合着用上了, PHP5的新...

    net学习笔记及其他代码应用

    33.写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。 答:解1: select top 10 * from A where id not in (select top 30 id from A) 解2: select top 10 * ...

    最新Java面试宝典pdf版

    6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序: 71 7、写一个Singleton出来。 75 8、递归算法题1 77 9、递归算法题2 78 10、排序都有哪几种方法?请列举。用JAVA...

    Java面试宝典-经典

    6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序: 71 7、写一个Singleton出来。 75 8、递归算法题1 77 9、递归算法题2 78 10、排序都有哪几种方法?请列举。用JAVA...

    java面试题大全(2012版)

    6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序: 71 7、写一个Singleton出来。 75 8、递归算法题1 77 9、递归算法题2 78 10、排序都有哪几种方法?请列举。用JAVA...

    java面试宝典2012

    6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序: 78 7、写一个Singleton出来。 81 8、递归算法题1 84 9、递归算法题2 85 10、排序都有哪几种方法?请列举。用JAVA...

    Java面试宝典2012版

    6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序: 71 7、写一个Singleton出来。 75 8、递归算法题1 77 9、递归算法题2 78 10、排序都有哪几种方法?请列举。用...

    ASP设计在线考试系统OnlineTest

    如果使用了 PL/pgSQL,那么可以把一块运算和一系列查询在数据库服务器里面组成一个块,这样就拥有了过程语言的力量并且简化SQL的使用,因而节约了大量的时间,因为用不着付出客户端/服务器通讯的过热。通过使用PL/...

Global site tag (gtag.js) - Google Analytics