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----------------------
相关推荐
以下是对从Set中取出有序记录的详细解释: 1. **HashSet与TreeSet的区别**: - **无序性**:HashSet不保证元素的插入顺序,而TreeSet则按照元素的自然排序或自定义排序保持元素的顺序。 - **排序依据**:HashSet...
Java8从List集合中取出某一属性的值的集合案例 Java8从List集合中取出某一属性的值的集合案例是一个非常有价值的知识点,主要介绍了如何使用Java8的流式编程从List集合中取出某一属性的值的集合。下面将详细介绍这...
根据给定的文件信息,我们可以总结出以下关于如何使用Java从MySQL数据库中获取数据并在JTable中显示的相关知识点: ### 一、导入必要的库 在Java程序中操作MySQL数据库及Swing组件,需要导入以下几个包: 1. `java...
在数据处理领域,Kettle(Pentaho Data Integration,PDI)是一款强大的ETL(Extract, Transform, Load)工具,它允许用户从多种数据源提取数据,并进行转换和加载到目标系统。本话题主要探讨如何在Kettle中实现循环...
在Java编程中,`properties`文件是一个常用的配置文件格式,用于存储程序的配置信息,如数据库连接字符串、系统参数...在实际项目中,这样的功能可以应用于记录程序的启动时间、更新时间等,方便追踪和管理软件的状态。
1. **Map阶段**:从输入的行中取出访问日期(从访问时间里面处理出来,注意为了做到排序输出此处必须得使用时间戳格式,而不能用传统的format格式)和访问地址拼接作为key,并取出用户IP作为value。 - Map输出:...
这时,我们再次编译我们的工程,顺利编译,生成osipparser2.dll,这时,网上很多文档里可能直接就说,这一步也会生成libs目录,里面里osipparser2.lib文件,但我们这里没有生成:) 最简单的方法,不用深究,直接...
填充算法,也被称为“洪水填充”或Flood Fill,其基本思想是从给定的起始点开始,逐步改变相邻的颜色,直到整个封闭区域的颜色都被更新。这个过程通常用于图像编辑软件中,用户选择一个颜色并点击图像的一个像素,...
SQL在运行时先取出数个查询的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。 实际大部分应用中是不会产生重复的记录,推荐采用UNION ALL操作符...
我发这个里面的实现只是一个例子. 让大家知道如何调用.. 2. 关于不好向PHP5移植, 我从没想过要移植到PHP5上. 因为如果要移值, 你敢说你的框架不要改.. 恐怕要改的也不在少数.就算你勉强凑合着用上了, PHP5的新...
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 * ...
6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序: 71 7、写一个Singleton出来。 75 8、递归算法题1 77 9、递归算法题2 78 10、排序都有哪几种方法?请列举。用JAVA...
6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序: 71 7、写一个Singleton出来。 75 8、递归算法题1 77 9、递归算法题2 78 10、排序都有哪几种方法?请列举。用JAVA...
6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序: 71 7、写一个Singleton出来。 75 8、递归算法题1 77 9、递归算法题2 78 10、排序都有哪几种方法?请列举。用JAVA...
6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序: 78 7、写一个Singleton出来。 81 8、递归算法题1 84 9、递归算法题2 85 10、排序都有哪几种方法?请列举。用JAVA...
6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序: 71 7、写一个Singleton出来。 75 8、递归算法题1 77 9、递归算法题2 78 10、排序都有哪几种方法?请列举。用...
如果使用了 PL/pgSQL,那么可以把一块运算和一系列查询在数据库服务器里面组成一个块,这样就拥有了过程语言的力量并且简化SQL的使用,因而节约了大量的时间,因为用不着付出客户端/服务器通讯的过热。通过使用PL/...