1. 关键技术:
  2. HashSet采用散列函数对元素进行排序,是专门为快速查询而设计的。存入HashSet的对象必须定义hashCode方法。
  3. TreeSet采用红黑树的数据结构进行排序元素,使用它可以从Set中提取有序(升序或者降序)的序列。需要注意的是,存入自定义类时,TreeSet需要维护元素的存储顺序,因此自定义类要实现Comparable接口并定义compareTo方法。
  4. LinkedHashSet内部使用散列以加快查询速度,同时使用链表维护元素插入的次序,在使用迭代器遍历Set时,结果会按元素插入的次序显示。
关键技术:

    HashSet采用散列函数对元素进行排序,是专门为快速查询而设计的。存入HashSet的对象必须定义hashCode方法。
TreeSet采用红黑树的数据结构进行排序元素,使用它可以从Set中提取有序(升序或者降序)的序列。需要注意的是,存入自定义类时,TreeSet需要维护元素的存储顺序,因此自定义类要实现Comparable接口并定义compareTo方法。
LinkedHashSet内部使用散列以加快查询速度,同时使用链表维护元素插入的次序,在使用迭代器遍历Set时,结果会按元素插入的次序显示。
  1. package book.arrayset;
  2. import java.util.ArrayList;
  3. import java.util.HashSet;
  4. import java.util.Iterator;
  5. import java.util.LinkedHashSet;
  6. import java.util.List;
  7. import java.util.Set;
  8. import java.util.TreeSet;
  9. /**
  10. * 演示各种Set的使用
  11. * 存入Set的每个元素必须是唯一的,因为Set不保存重复元素。
  12. */
  13. public class TestSet {
  14. /**
  15. * 初始化Set的元素
  16. * @param set
  17. */
  18. public static void init(Set set){
  19. if (set != null){
  20. set.add("aaa");
  21. set.add("ccc");
  22. set.add("bbb");
  23. set.add("eee");
  24. set.add("ddd");
  25. }
  26. }
  27. /**
  28. * 输出set的元素
  29. * @param set
  30. */
  31. public static void output(Set set){
  32. if (set != null){
  33. //使用迭代器遍历Set,也只有这一种方法
  34. Iterator it = set.iterator();
  35. while (it.hasNext()){
  36. System.out.print(it.next() + " ");
  37. }
  38. }
  39. System.out.println();
  40. }
  41. /**
  42. * 使用HashSet
  43. */
  44. public static void testHashSet(){
  45. Set mySet = new HashSet();
  46. init(mySet);
  47. System.out.println("使用HashSet: ");
  48. output(mySet);
  49. }
  50. /**
  51. * 使用TreeSet
  52. */
  53. public static void testTreeSet(){
  54. Set mySet = new TreeSet();
  55. init(mySet);
  56. System.out.println("使用TreeSet: ");
  57. output(mySet);
  58. }
  59. /**
  60. * 使用LinkedHashSet
  61. */
  62. public static void testLinkedHashSet(){
  63. Set mySet = new LinkedHashSet();
  64. init(mySet);
  65. System.out.println("使用LinkedHashSet: ");
  66. output(mySet);
  67. }
  68. public static void main(String[] args) {
  69. TestSet.testHashSet();
  70. TestSet.testTreeSet();
  71. TestSet.testLinkedHashSet();
  72. Set mySet = new HashSet();
  73. init(mySet);
  74. //Set不允许元素重复
  75. mySet.add("aaa");
  76. mySet.add("bbb");
  77. System.out.println("为mySet加入aaa, bbb元素后: ");
  78. output(mySet);
  79. //删除元素
  80. mySet.remove("aaa");
  81. System.out.println("mySet删除aaa元素后: ");
  82. output(mySet);
  83. //增加另外一个集合中的所有元素
  84. List list = new ArrayList();
  85. list.add("aaa");
  86. list.add("aaa");
  87. list.add("fff");
  88. mySet.addAll(list);
  89. System.out.println("mySet添加另外一个集合的所有元素后: ");
  90. output(mySet);
  91. //删除除了另外一个集合包含的以外的所有元素
  92. mySet.retainAll(list);
  93. System.out.println("mySet删除除了另外一个集合包含的以外的所有元素后: ");
  94. output(mySet);
  95. //删除另外一个集合包含的所有元素
  96. mySet.removeAll(list);
  97. System.out.println("mySet删除另外一个集合包含的所有元素后: ");
  98. output(mySet);
  99. //获取Set中元素的个数
  100. System.out.println("mySet中当前元素的个数: " + mySet.size());
  101. //判断Set中元素个数是否为0
  102. System.out.println("mySet中当前元素为0?  " + mySet.isEmpty());
  103. /**
  104. * (1)Set不允许重复元素,因此加入Set的Object必须定义equals()方法以确保对象的唯一性。
  105. * (2)HashSet采用散列函数对元素进行排序,是专门为快速查询而设计的。存入HashSet的对象必须定义hashCode()。
  106. * (3)TreeSet采用红黑树的数据结构进行排序元素,能保证元素的次序,使用它可以从Set中提取有序的序列。
  107. * 需要注意的是,生成自己的类时,Set需要维护元素的存储顺序,因此要实现Comparable接口并定义compareTo()方法。
  108. * (4)LinkedHashSet内部使用散列以加快查询速度,同时使用链表维护元素的插入的次序,在使用迭代器遍历Set时,结果会按元素插入的次序显示。
  109. */
  110. }
  111. }

HashSet、LinkedHashSet和TreeSet的更多相关文章

  1. HashSet、LinkedHashSet、TreeSet

    以下内容基于jdk1.7.0_79源码: 关于HashSet.LinkedHashSet.TreeSet Set接口的实现类,最大特点是不允许出现重复元素: HashSet:基于HashMap实现,一 ...

  2. 规则集之探究何时使用HashSet、LinkedHashSet以及TreeSet?

    前言 Java集合框架三种主要类型的集合:规则集(Set).线性表(List).队列(Queue).Set用来存储不可重复的元素:List用来存储有元素构成的有序的集合:而Queue则用于存储用先进先 ...

  3. Java集合框架(二)—— HashSet、LinkedHashSet、TreeSet和EnumSet

    Set接口 前面已经简绍过Set集合,它类似于一个罐子,一旦把对象'丢进'Set集合,集合里多个对象之间没有明显的顺序.Set集合与Collection基本上完全一样,它没有提供任何额外的方法. Se ...

  4. 一、集合框架(关于ArrayList,LinkedList,HashSet,LinkedHashSet,TreeSet)

    一.ArrayList 解决了数组的局限性,最常见的容器类,ArrayList容器的容量capacity会随着对象的增加,自动增长.不会出现数组边界的问题. package collection;   ...

  5. 09 Collection,Iterator,List,listIterator,Vector,ArrayList,LinkedList,泛型,增强for,可变参数,HashSet,LinkedHashSet,TreeSet

    09 Collection,Iterator,List,listIterator,Vector,ArrayList,LinkedList,泛型,增强for,可变参数,HashSet,LinkedHas ...

  6. java集合框架之几种set(HashSet LinkedHashSet TreeSet )

    参考http://how2j.cn/k/collection/collection-sets/691.html#nowhere HashSet LinkedHashSet TreeSet HashSe ...

  7. Java集合系列(三):HashSet、LinkedHashSet、TreeSet的使用方法及区别

    本篇博客主要讲解Set接口的三个实现类HashSet.LinkedHashSet.TreeSet的使用方法以及三者之间的区别. 注意:本文中代码使用的JDK版本为1.8.0_191 1. HashSe ...

  8. Java中的集合HashSet、LinkedHashSet、TreeSet和EnumSet(二)

    Set接口 前面已经简绍过Set集合,它类似于一个罐子,一旦把对象'丢进'Set集合,集合里多个对象之间没有明显的顺序.Set集合于Collection基本上完全一样,它没有提供任何额外的方法. Se ...

  9. Java自学-集合框架 HashSet、LinkedHashSet、TreeSet之间的区别

    HashSet. LinkedHashSet.TreeSet之间的区别 步骤 1 : HashSet LinkedHashSet TreeSet HashSet: 无序 LinkedHashSet: ...

  10. Java Set 常用集合 HashSet、LinkedHashSet、TreeSet

    Java 中的 Set 是非常常用的数据类型.Set 是无序的 Collection,Java Set 有三个常用的实现类,分别是:HashSet.LinkedHashSet.TreeSet 本文基于 ...

随机推荐

  1. Python 字符串换行的几种方式

    第一种: x0 = '<?xml version="1.0"?>' \ '<ol>' \ ' <li><a href="/pyt ...

  2. Python 3基础教程8--if else、if elif else

    本文介绍if else语句,不多说,直接看例子. if elif else语句

  3. SPOJ - DQUERY(区间不同数+树状数组)

    链接:SPOJ - DQUERY 题意:求给定区间不同数的个数(不更新). 题解:离线+树状数组. 对所求的所有区间(l, r)根据r从小到大排序.从1-n依次遍历序列数组,在树状数组中不断更新a[i ...

  4. 孤荷凌寒自学python第六十二天学习mongoDB的基本操作并进行简单封装1

    孤荷凌寒自学python第六十二天学习mongoDB的基本操作并进行简单封装1 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第八天. 今天开始学习mongoDB的简单操作, ...

  5. Megacli查看Dell服务器Raid状态

    通常我们使用的DELL/HP/IBM三家的机架式PC级服务器阵列卡是从LSI的卡OEM出来的,DELL和IBM两家的阵列卡原生程度较高,没有做太多封装,可以用原厂提供的阵列卡管理工具进行监控:而HP的 ...

  6. 课时17:函数:Python的乐高积木

    目录: 一.创建和调用函数 二.函数的参数 三.函数的返回值 四.课时17课后习题及答案 为了使得程序得代码变得简单,就需要把程序分解成较小得组成部分.有三种方法可以实现:函数.对象.模块. **** ...

  7. Linux 文本对比 diff 命令详解(整理)

    diff 命令详解 1.概述 windows系统下面就有不错的文本对比工具可以使用,例如常用的Beyond Compare,WinMerge都是图形界面的比较工具而且使用非常方便,如果你仅仅是在win ...

  8. BETA(1)

    目录 组员情况 组员1(组长):胡绪佩 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示组内最新成果 团 ...

  9. Java中常用的正则表达式判断,如IP地址、电话号码、邮箱等

    java中我们会常用一些判断如IP.电子邮箱.电话号码的是不是符合,那么我们怎么来判断呢,答案就是利用正则表达式来判断了,因为本人对正则表达式没有太深的研究,所有感兴趣的朋友可以自行百度.我这就给基本 ...

  10. Win10 Ubuntu18.04 编译安装 nignx

    nginx 下载页 http://nginx.org/en/download.html wget http://nginx.org/download/nginx-1.14.0.tar.gz //安装依 ...