Java 从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----------------------
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Java
# Set取值
# 从Set中有序取值
# Java基础之集合Set详解
# Java Set集合去重的原理及实现
# Java 容器类源码详解 Set
# Java Set简介_动力节点Java学院整理
# Java集合之Set接口及其实现类精解
# 拿出来
# 实现了
# 就会
# 希望能
# 就得
# 并对
# 时就
# 报错
# 谢谢大家
# 排在
# 就可以
# 而不是
# 然后又
# uname
# user
# int
相关文章:
如何访问已购建站主机并解决登录问题?
手机网站制作与建设方案,手机网站如何建设?
网站制作免费,什么网站能看正片电影?
如何通过西部建站助手安装IIS服务器?
平台云上自主建站:模板化设计与智能工具打造高效网站
高端网站建设与定制开发一站式解决方案 中企动力
专业公司网站制作公司,用什么语言做企业网站比较好?
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
html制作网站的步骤有哪些,iapp如何添加网页?
如何用PHP快速搭建高效网站?分步指南
网站制作的步骤包括,正确网址格式怎么写?
如何快速搭建支持数据库操作的智能建站平台?
如何快速搭建自助建站会员专属系统?
如何解决VPS建站LNMP环境配置常见问题?
Swift中循环语句中的转移语句 break 和 continue
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
如何通过老薛主机一键快速建站?
宁波自助建站系统如何快速打造专业企业网站?
如何在阿里云部署织梦网站?
PHP正则匹配日期和时间(时间戳转换)的实例代码
如何登录建站主机?访问步骤全解析
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
网站插件制作软件免费下载,网页视频怎么下到本地插件?
如何续费美橙建站之星域名及服务?
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
沈阳制作网站公司排名,沈阳装饰协会官方网站?
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
如何在宝塔面板中创建新站点?
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
h5网站制作工具有哪些,h5页面制作工具有哪些?
如何高效生成建站之星成品网站源码?
网站制作服务平台,有什么网站可以发布本地服务信息?
制作网站的公司有哪些,做一个公司网站要多少钱?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
济南企业网站制作公司,济南社保单位网上缴费步骤?
可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?
无锡营销型网站制作公司,无锡网选车牌流程?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
香港服务器租用每月最低只需15元?
如何正确下载安装西数主机建站助手?
建站之星2.7模板快速切换与批量管理功能操作指南
Swift中swift中的switch 语句
建站之星IIS配置教程:代码生成技巧与站点搭建指南
如何在Tomcat中配置并部署网站项目?
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
香港服务器WordPress建站指南:SEO优化与高效部署策略
建站主机系统SEO优化与智能配置核心关键词操作指南
北京的网站制作公司有哪些,哪个视频网站最好?
中山网站制作网页,中山新生登记系统登记流程?
*请认真填写需求信息,我们会在24小时内与您取得联系。