Set里面的记录是无序的。假设想使用Set,然后又想里面的记录是有序的,就能够使用TreeSet。而不是HashSet。在使用TreeSet的时候,里面的元素必须是实现了Comparable接口的,TreeSet在进行排序的时候就是通过比較它们的Comparable接口的实现。

以下是HashSet的无序和TreeSet的有序的比較:

Test类:

  1. import java.util.HashSet;
  2. import java.util.Iterator;
  3. import java.util.Set;
  4. import java.util.TreeSet;
  5. public class Test {
  6. public static void main(String args[]) {
  7. useHashSet();
  8. useTreeSet();
  9. }
  10. /**
  11. * Set默认是无序的。一般从Set里面拿出来的数据每次的顺序都会是不一样的,假设想里面的顺序一样
  12. * 就使用TreeSet
  13. */
  14. public static void useHashSet() {
  15. System.out.println("-----------------HashSet Start------------------");
  16. Set<User> set = new HashSet<User>();
  17. ; i < 10; i++) {
  18. ), "uname" + (i + 1), "pswd" + (i + 1));
  19. set.add(user);
  20. }
  21. Iterator<User> iter = set.iterator();
  22. while (iter.hasNext())
  23. System.out.println(iter.next());
  24. System.out.println("------------------HashSet End----------------------");
  25. }
  26. /**
  27. * TreeSet是有序的。TreeSet在给里面的元素排序是通过它们的Comparable接口的实现来比較的,所以,
  28. * 假设里面的对象没有实现Comparable接口,则TreeSet在执行时就会报错,所以假设想从Set里面拿出来的数据是
  29. * 有序的就得使里面的对象实现Comparable接口,User2是实现了Comparable接口的,并对它们的id进行比較。id大
  30. * 的就会排在后面
  31. */
  32. public static void useTreeSet() {
  33. System.out.println("-----------------TreeSet Start------------------");
  34. Set<User2> set = new TreeSet<User2>();
  35. ; i < 10; i++) {
  36. ), "uname" + (i + 1), "pswd" + (i + 1));
  37. set.add(user);
  38. }
  39. Iterator<User2> iter = set.iterator();
  40. while (iter.hasNext())
  41. System.out.println(iter.next());
  42. System.out.println("------------------TreeSet End----------------------");
  43. }
  44. }

User类:

  1. public class User {
  2. private int id;
  3. private String username;
  4. private String password;
  5. public User() {
  6. }
  7. public User(int id, String username, String password) {
  8. this.id = id;
  9. this.username = username;
  10. this.password = password;
  11. }
  12. public int getId() {
  13. return id;
  14. }
  15. public void setId(int id) {
  16. this.id = id;
  17. }
  18. public String getUsername() {
  19. return username;
  20. }
  21. public void setUsername(String username) {
  22. this.username = username;
  23. }
  24. public String getPassword() {
  25. return password;
  26. }
  27. public void setPassword(String password) {
  28. this.password = password;
  29. }
  30. @Override
  31. public int hashCode() {
  32. ;
  33. ;
  34. result = prime * result + id;
  35. return result;
  36. }
  37. @Override
  38. public boolean equals(Object obj) {
  39. if (this == obj)
  40. return true;
  41. if (obj == null)
  42. return false;
  43. if (getClass() != obj.getClass())
  44. return false;
  45. User other = (User) obj;
  46. if (id != other.id)
  47. return false;
  48. return true;
  49. }
  50. @Override
  51. public String toString() {
  52. return " id = " + id + ", \r\n username = " + username
  53. + ", \r\n password = " + password;
  54. }
  55. }

User2类:

  1. public class User2 implements Comparable<User2> {
  2. private int id;
  3. private String username;
  4. private String password;
  5. public User2() {
  6. }
  7. public User2(int id, String username, String password) {
  8. this.id = id;
  9. this.username = username;
  10. this.password = password;
  11. }
  12. public int getId() {
  13. return id;
  14. }
  15. public void setId(int id) {
  16. this.id = id;
  17. }
  18. public String getUsername() {
  19. return username;
  20. }
  21. public void setUsername(String username) {
  22. this.username = username;
  23. }
  24. public String getPassword() {
  25. return password;
  26. }
  27. public void setPassword(String password) {
  28. this.password = password;
  29. }
  30. @Override
  31. public int hashCode() {
  32. ;
  33. ;
  34. result = prime * result + id;
  35. return result;
  36. }
  37. @Override
  38. public boolean equals(Object obj) {
  39. if (this == obj)
  40. return true;
  41. if (obj == null)
  42. return false;
  43. if (getClass() != obj.getClass())
  44. return false;
  45. User2 other = (User2) obj;
  46. if (id != other.id)
  47. return false;
  48. return true;
  49. }
  50. @Override
  51. public String toString() {
  52. return " id = " + id + ", \r\n username = " + username
  53. + ", \r\n password = " + password;
  54. }
  55. @Override
  56. public int compareTo(User2 user) {
  57. // TODO Auto-generated method stub
  58. //这里我的实现是依照id进行排序
  59. if (user == null)
  60. ;
  61. if (id > user.getId())
  62. ;
  63. else if (id == user.getId())
  64. ;
  65. else
  66. ;
  67. }
  68. }

执行结果:

  1. -----------------HashSet Start------------------
  2. ,
  3. username = uname3,
  4. password = pswd3
  5. ,
  6. username = uname4,
  7. password = pswd4
  8. ,
  9. username = uname1,
  10. password = pswd1
  11. ,
  12. username = uname2,
  13. password = pswd2
  14. ,
  15. username = uname7,
  16. password = pswd7
  17. ,
  18. username = uname8,
  19. password = pswd8
  20. ,
  21. username = uname5,
  22. password = pswd5
  23. ,
  24. username = uname6,
  25. password = pswd6
  26. ,
  27. username = uname9,
  28. password = pswd9
  29. ,
  30. username = uname10,
  31. password = pswd10
  32. ------------------HashSet End----------------------
  33. -----------------TreeSet Start------------------
  34. ,
  35. username = uname1,
  36. password = pswd1
  37. ,
  38. username = uname2,
  39. password = pswd2
  40. ,
  41. username = uname3,
  42. password = pswd3
  43. ,
  44. username = uname4,
  45. password = pswd4
  46. ,
  47. username = uname5,
  48. password = pswd5
  49. ,
  50. username = uname6,
  51. password = pswd6
  52. ,
  53. username = uname7,
  54. password = pswd7
  55. ,
  56. username = uname8,
  57. password = pswd8
  58. ,
  59. username = uname9,
  60. password = pswd9
  61. ,
  62. username = uname10,
  63. password = pswd10
  64. ------------------TreeSet End----------------------

从Set里面取出有序的记录的更多相关文章

  1. [Spark][Python]DataFrame中取出有限个记录的例子

    [Spark][Python]DataFrame中取出有限个记录的例子: sqlContext = HiveContext(sc) peopleDF = sqlContext.read.json(&q ...

  2. 从mysql数据表中随机取出一条记录

    核心查找数据表代码: ; //此处的1就是取出数据的条数 但这样取数据网上有人说效率非常差的,那么要如何改进呢 搜索Google,网上基本上都是查询max(id) * rand()来随机获取数据. S ...

  3. LinkedHashMap唯一,存储取出有序

    package cn.itcast_03; import java.util.LinkedHashMap; import java.util.Set; /* * LinkedHashMap:是Map接 ...

  4. LinkedHashSet 元素唯一,存储取出有序

      package cn.itcast_04; import java.util.LinkedHashSet; /* * LinkedHashSet:底层数据结构由哈希表和链表组成. * 哈希表保证元 ...

  5. sql server数据库查询取出重复数据记录

    问题:博主在2011年6月,广东技术师范大学大四的时候,从学校计算机科学学院网站看到招聘信息并到广东中原地产IT部面试,很清楚记得当时的面试题目:怎么从数据库里面查询重复记录. 解决方案:在sql s ...

  6. Java遇见HTML——JSP篇之商品浏览记录的实现

    一.项目总体介绍 使用Cookie实现商品浏览记录. 要实现这个程序采取的是Model1(Jsp+JavaBean)架构实现,具体步骤: 首先要有个数据库,商品表,操作数据库的一个类DBHelper类 ...

  7. PHP如何实现在数据库随机获取几条记录

    本文实例讲述了PHP实现在数据库百万条数据中随机获取20条记录的方法.PHP实例分享给大家供大家参考,具体如下: 为什么要写这个? 在去某个公司面试时,让写个算法出来,当时就蒙了,我开发过程中用到算法 ...

  8. MySQL--详细查询操作(单表记录查询、多表记录查询(连表查询)、子查询)

    一.单表查询 1.完整的语法顺序(可以不写完整,其次顺序要对) (不分组,且当前表使用聚合函数: 当前表为一组,显示统计结果 ) select distinct [*,查询字段1,查询字段2,表达式, ...

  9. MySQL之单表查询 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询

    MySQL之单表查询 阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER B ...

随机推荐

  1. 2017国家集训队作业[agc004f]Namori

    2017国家集训队作业[agc004f]Namori 题意: 给你一颗树或环套树,树上有\(N\)个点,有\(M\)条边.一开始,树上的点都是白色,一次操作可以选择一条端点颜色相同的边,使它的端点颜色 ...

  2. myBatis通过逗号分隔字符串,foreach

    前言 当数据库里存储的值是以逗号分隔格式存储的字符串时. 数据格式如下:  id name  ids   1  张三  a,b,c  2  李四  c,d,e 我们拿到的条件参数是:b,e 1.后台通 ...

  3. ArcGIS中数据之间的转换接口IFeatureDataConverter2

    之前我写过一篇文章关于ArcGIS各种空间数据格式之间转换的通用方法:ArcGIS中sde,mdb,shp数据之间的转换.这里使用的主要接口方法就是用到了IFeatureDataConverter接口 ...

  4. STM32介绍以及与通常ARM的区别

    ARM是英国的芯片设计公司,其最成功的莫过于32位嵌入式CPU核----ARM系列,最常用的是ARM7和ARM9,ARM公司主要提供IP核,就是CPU的内核结构,只包括最核心的部分,并不是完整的处理器 ...

  5. 用Zebra打造Linux下小型路由器

    用Zebra打造Linux下小型路由器 现在的Internet网络相当庞大,不可能在不同的网络之间建立直接的连接,所以这时就必须用路由器为不同网络之间的通信提供路径选择.Linux下搭建路由器价格非常 ...

  6. Redux简易理解

    1. createStore(相当于vuex的$store) 这才是数据存储仓库,用来存储初和输出的数据,更vuex$store功能一样 作用:  创建一个 Redux store 来以存放应用中所有 ...

  7. Spider_req

    requests模块 安装(用管理员身份去打开Anaconda Prompt) conda install requests python -m pip install requests # 以管理员 ...

  8. CList 点击表头排序 (1)SortItems函数

    点击表头排序整体的思路都是去 CListCtrl类中的方法SortItems去实现 CListCtrl::SortItems的原型是: BOOL SortItems( PFNLVCOMPARE pfn ...

  9. Direct2D开发:向 MFC 项目添加 Direct2D 对象

    0X01 创建 MFC 应用程序: 在“文件”菜单上指向“新建”,然后单击“项目”. 在“新建项目”对话框左窗格的“已安装的模板”下,展开“Visual C++”,然后选择“MFC”. 在中间窗格中, ...

  10. 洛谷 P1194 买礼物

    洛谷 P1194 买礼物 题目描述 又到了一年一度的明明生日了,明明想要买B样东西,巧的是,这B样东西价格都是A元. 但是,商店老板说最近有促销活动,也就是: 如果你买了第II样东西,再买第J样,那么 ...