从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>();
- ; i < 10; i++) {
- ), "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>();
- ; i < 10; i++) {
- ), "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() {
- ;
- ;
- 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() {
- ;
- ;
- 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)
- ;
- if (id > user.getId())
- ;
- else if (id == user.getId())
- ;
- else
- ;
- }
- }
执行结果:
- -----------------HashSet Start------------------
- ,
- username = uname3,
- password = pswd3
- ,
- username = uname4,
- password = pswd4
- ,
- username = uname1,
- password = pswd1
- ,
- username = uname2,
- password = pswd2
- ,
- username = uname7,
- password = pswd7
- ,
- username = uname8,
- password = pswd8
- ,
- username = uname5,
- password = pswd5
- ,
- username = uname6,
- password = pswd6
- ,
- username = uname9,
- password = pswd9
- ,
- username = uname10,
- password = pswd10
- ------------------HashSet End----------------------
- -----------------TreeSet Start------------------
- ,
- username = uname1,
- password = pswd1
- ,
- username = uname2,
- password = pswd2
- ,
- username = uname3,
- password = pswd3
- ,
- username = uname4,
- password = pswd4
- ,
- username = uname5,
- password = pswd5
- ,
- username = uname6,
- password = pswd6
- ,
- username = uname7,
- password = pswd7
- ,
- username = uname8,
- password = pswd8
- ,
- username = uname9,
- password = pswd9
- ,
- username = uname10,
- password = pswd10
- ------------------TreeSet End----------------------
从Set里面取出有序的记录的更多相关文章
- [Spark][Python]DataFrame中取出有限个记录的例子
[Spark][Python]DataFrame中取出有限个记录的例子: sqlContext = HiveContext(sc) peopleDF = sqlContext.read.json(&q ...
- 从mysql数据表中随机取出一条记录
核心查找数据表代码: ; //此处的1就是取出数据的条数 但这样取数据网上有人说效率非常差的,那么要如何改进呢 搜索Google,网上基本上都是查询max(id) * rand()来随机获取数据. S ...
- LinkedHashMap唯一,存储取出有序
package cn.itcast_03; import java.util.LinkedHashMap; import java.util.Set; /* * LinkedHashMap:是Map接 ...
- LinkedHashSet 元素唯一,存储取出有序
package cn.itcast_04; import java.util.LinkedHashSet; /* * LinkedHashSet:底层数据结构由哈希表和链表组成. * 哈希表保证元 ...
- sql server数据库查询取出重复数据记录
问题:博主在2011年6月,广东技术师范大学大四的时候,从学校计算机科学学院网站看到招聘信息并到广东中原地产IT部面试,很清楚记得当时的面试题目:怎么从数据库里面查询重复记录. 解决方案:在sql s ...
- Java遇见HTML——JSP篇之商品浏览记录的实现
一.项目总体介绍 使用Cookie实现商品浏览记录. 要实现这个程序采取的是Model1(Jsp+JavaBean)架构实现,具体步骤: 首先要有个数据库,商品表,操作数据库的一个类DBHelper类 ...
- PHP如何实现在数据库随机获取几条记录
本文实例讲述了PHP实现在数据库百万条数据中随机获取20条记录的方法.PHP实例分享给大家供大家参考,具体如下: 为什么要写这个? 在去某个公司面试时,让写个算法出来,当时就蒙了,我开发过程中用到算法 ...
- MySQL--详细查询操作(单表记录查询、多表记录查询(连表查询)、子查询)
一.单表查询 1.完整的语法顺序(可以不写完整,其次顺序要对) (不分组,且当前表使用聚合函数: 当前表为一组,显示统计结果 ) select distinct [*,查询字段1,查询字段2,表达式, ...
- MySQL之单表查询 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询
MySQL之单表查询 阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER B ...
随机推荐
- 多行文本溢出显示...的方法(-webkit-line-clamp)
限制在一个块元素显示的文本的行数. -webkit-line-clamp 是一个 不规范的属性(unsupported WebKit property),它没有出现在 CSS 规范草案中. 为了实现该 ...
- dp水题
hdu 2084: #include <stdio.h> #include <iostream> #include <string.h> using namespa ...
- C# WPF开源控件库MaterialDesign介绍
介绍 1.由于前端时间萌发开发一个基础架构得WPF框架得想法, 然后考虑到一些界面层元素统一, 然后就无意间在GitHub上发现一个开源WPF UI, 于是下载下来了感觉不错. 官网地址:http:/ ...
- Spring Cloud Sleuth通过Kafka将链路追踪日志输出到ELK
1.工程简介 elk-eureka-server作为其他三个项目的服务注册中心 elk-kafka-client调用elk-kafka-server,elk-kafka-server再调用elk-ka ...
- Hyperic
https://my.oschina.net/hyperichq/blog/525590
- VC多线程临界区
在使用多线程时,一般非常少有多个线程全然独立的工作.往往是多个线程同一时候操作一个全局变量来获取程序的执行结果.多个线程同一时候訪问同一个全局变量,假设都是读取操作,则不会出现故障. 假设是写操作,则 ...
- wordpress+wampserver
听说过wordpress和joomla这样的简单建站的工具,尽管是PHP,可是看过同事搭建的公司站点.效果真心不错.于是手痒痒尝试一下.由于是搭着玩儿.所以用wordpress+wampserver( ...
- Android SDK使用国内镜像站,解决下载速度慢无法更新?
1. 国内android开源镜像网站 下面是国内几个比較知名的开源网站.我用的是电子科技大学的镜像源,下载速度很快. mirrors.neusoft.edu.cn //东软信息学院 ubuntu.bu ...
- eclipse-ubuntu14.04图标替换不掉的问题
今天安装14.04的时候,遇到了一个问题.就是eclipse安装好以后,发现需要配置ADT,老是配置失败.后来实在没有办法了,所以就把这个eclipse跟删除了(当时它并没有安装,而是仅仅解压以后双击 ...
- 69.fprintf fscanf
fprintf //从读文件中提取字符串到info1.user和info1.password中 fscanf(pfr, "%s%s", info1.user, info1.pass ...