集合Set

  • 确定性:对任何对象都能判定其是否属于某一个集合;
  • 互异性:集合内每个元素都是不相同的,内容互异;
  • 无序性:集合内的顺序无关;

Java中的集合接口Set

  • HashSet(基于散列函数的集合,无序,不支持同步)
  • TreeSet(基于树结构的集合,可排序的,不支持同步)
  • LinkedHashSet(基于散列函数和双向链表的集合,可排序的,不支持同步)

HashSet

  • 基于HashMap实现的,可以容纳null元素,不支持同步

    • Set s=Collections.synchronizedSet(new HashSet(...));
  • add 添加一个元素
  • clear 清除整个HashSet
  • contains 判定是否包含一个元素
  • remove 删除一个元素
  • size 大小
  • retainsAll 计算两个集合交集
import 

测试结果

6
7
7
============for循环遍历==============
null
40000
3
20
6
1000
5000000
============测试集合交集==============
交集是 [c]
============测试多种遍历方法速度==============
============迭代器遍历==============
59033300纳秒
============for-each遍历==============
96651700纳秒

  • 对集合进行元素重复添加无效
  • 遍历的输出顺序与元素添加顺序无关
  • 迭代器遍历效率更高

LinkedHashSet

  • 继承HashSet,也是基于HashMap实现的,可以容纳null元素
  • 不支持同步
    • Set s = Collection.synchronizedSet(New LinkedHashSet(...));
  • 方法和HashSet基本一致
    • add,clear,contains,remove,size
  • 通过一个双向链表维护插入顺序
import 

测试结果

6
7
7
============for循环遍历==============
null
1000
20
3
40000
5000000
6
============迭代器遍历==============
12353400纳秒
============for-each遍历==============
9365600纳秒

  • 遍历结果和插入顺序一致
  • for-each遍历更快

TreeSet

  • 基于TreeMap实现,不可以容纳null元素,不支持同步

    • SortedSet s=Collections.synchronizedSortedSet(new TreeSet(...));//变成同步
  • add 添加一个元素
  • clear清除整个TreeSet
  • contains判断是否包含一个元素
  • remove删除一个元素
  • size大小
  • 根据compareTo方法或指定Comparator排序
import 

输出结果:

5
6
6
============for循环遍历==============
3
6
20
1000
40000
5000000
============迭代器遍历==============
8987700纳秒
============for-each遍历==============
6676000纳秒

TreeSet按照所存储对象大小升序输出的

元素重复的判定

  • HashSet,LinkedHashSet,TreeSet的元素都只能是对象;
  • HashSet和LinkedHashSet判定元素是否重复原则:
    • 判定两个元素hashCode返回值是否相同,若不同,返回false;
    • 若两者hashCode相同,判定equals方法,若不同,返回false;否则,返回true;
    • hashCode和equals方法是所有类都有的,因为Object类有
  • TreeSet判定元素重复的原则
    • 需要元素继承自Comparable接口
    • 比较两个元素的compareTo方法

HashSet和LinkedHashSet例程:

Cat.java

class 

Dog.java

class 

Tiger.java

public 

ObjectHashSetTest

import 

输出:

5
6
6
============for循环遍历==============
3
6
20
1000
40000
5000000
============迭代器遍历==============
8987700纳秒
============for-each遍历==============
6676000纳秒
PS C:UserszhangDocumentsVS CodeJavaJavaCoreTechniqueSetDemo>  cd 'c:UserszhangDocumentsVS CodeJavaJavaCoreTechniqueSetDemo'; & 'C:Userszhang.vscodeextensionsvscjava.vscode-java-debug-0.25.1scriptslauncher.bat' 'C:Program FilesJavajdk-12.0.2binjava.exe' '-agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=localhost:8842' '-Dfile.encoding=UTF-8' '-cp' 'C:UserszhangDocumentsVS CodeJavaJavaCoreTechniqueSetDemobin' 'HashSetJudgeRuleTest'
4
PS C:UserszhangDocumentsVS CodeJavaJavaCoreTechniqueSetDemo>  cd 'c:UserszhangDocumentsVS CodeJavaJavaCoreTechniqueSetDemo'; & 'C:Userszhang.vscodeextensionsvscjava.vscode-java-debug-0.25.1scriptslauncher.bat' 'C:Program FilesJavajdk-12.0.2binjava.exe' '-agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=localhost:8863' '-Dfile.encoding=UTF-8' '-cp' 'C:UserszhangDocumentsVS CodeJavaJavaCoreTechniqueSetDemobin' 'ObjectHashSetTest'
==========Cat HashSet ==============
6
========================
6
==========Dog HashSet ==============
Dog hashCode()~~~~~~~~~~~
Dog hashCode()~~~~~~~~~~~
Dog hashCode()~~~~~~~~~~~
Dog hashCode()~~~~~~~~~~~
Dog hashCode()~~~~~~~~~~~
Dog hashCode()~~~~~~~~~~~
Dog equals()~~~~~~~~~~~
5
========================
Dog hashCode()~~~~~~~~~~~
Dog hashCode()~~~~~~~~~~~
Dog hashCode()~~~~~~~~~~~
Dog hashCode()~~~~~~~~~~~
Dog hashCode()~~~~~~~~~~~
Dog hashCode()~~~~~~~~~~~
Dog equals()~~~~~~~~~~~
5
==========Tiger HashSet ==============
6
========================
6

这三个方法三位一体:

  • equals()是相同的
  • hashCode()是相同的
  • toString()也应该是相同的

TreeSet例程

import 

结果

==========Tiger TreeSet ==============
Tiger compareTo()~~~~~~~~~~~
Tiger compareTo()~~~~~~~~~~~
Tiger compareTo()~~~~~~~~~~~
Tiger compareTo()~~~~~~~~~~~
Tiger compareTo()~~~~~~~~~~~
Tiger compareTo()~~~~~~~~~~~
Tiger compareTo()~~~~~~~~~~~
Tiger compareTo()~~~~~~~~~~~
Tiger compareTo()~~~~~~~~~~~
Tiger compareTo()~~~~~~~~~~~
5

循环结果添加到集合_Java Note-数据结构(4)集合相关推荐

  1. java 三大集合_java中的三大集合入门笔记(简单实用)

    为什么使用集合框架 如图: 集合的好处: 集合弥补了数组的缺陷,它比数组更灵活更实用,可大大提高软件的开发效率,而且不同的集合适用于不同的场合. Java集合主要分为以下3种类型 Java集合框架提供 ...

  2. java初始化集合_Java 中初始化 List 集合的 6 种方式!

    List 是 Java 开发中经常会使用的集合,你们知道有哪些方式可以初始化一个 List 吗?这其中不缺乏一些坑,今天栈长我给大家一一普及一下. 如果想学习Java工程化.高性能及分布式.深入浅出. ...

  3. java 有序集合_java有哪些有序集合?

    Comparable接口 Comparator接口 SortedSet接口 SortedMap接口 在集合框架中有许多类具有排序功能,如:TreeSet类TreeMap类 为了用"集合框架& ...

  4. java 返回集合_java – List返回一个对象集合

    我今天在一个内部图书馆的一部分工作,并希望通过在我们的"游戏"课程中添加基本的泛型来改进一些东西. 这是现在改变的游戏类的精简版: public abstract class Ga ...

  5. java 定义map集合_Java中的Map集合

    Map集合: 个人感觉Map接口以后会经常用到,可以很清晰地查找某个对象,要熟悉其四种遍历方法.特别注意其键值对的键不能是重复的,有想定义有序存取的话,可以使用LinkedHashMap集合.不过定义 ...

  6. JAVA中的arraylist集合_java中遍历ArrayList集合的四种方式

    详细内容 ArrayList遍历:取出ArrayList集合中的数据 方式一:for循环 方式二:增强for循环:foreach 方式三:Iterator:迭代器 方式四:ListIterator:双 ...

  7. java中遍历集合_java中遍历ArrayList集合的四种方式

    ArrayList遍历:取出ArrayList集合中的数据 方式一:for循环 方式二:增强for循环:foreach 方式三:Iterator:迭代器 方式四:ListIterator:双向迭代器 ...

  8. java并行处理集合_java多线程并行处理List集合数据

    前言碎语 最近可能要批量处理一些数据,准备使用多线程来助力,回顾了下多线程的一些开发技巧,下面是多线程并行处理List的一个小例子 代码看关键 /** * @author kl by 2016/6/2 ...

  9. plsql 循环存储过程返回数据集合_Java基础(十五)——Collection集合、泛型 - 寒江雨

    Collection集合 集合概述 集合:集合是Java中提供的一种容器,可以用来存储多个数据 数组的长度是固定的,集合的长度是可变的 数组中存储的是同一种数据类型的元素,可以存储基本数据类型也可以存 ...

  10. java集合替换集合_Java集合–您必须知道的13件事

    java集合替换集合 Java Collections Framework is one of the core parts of the Java programming language. Col ...

最新文章

  1. python可变参数和关键字参数位置_python的位置参数、默认参数、关键字参数、可变参数区别...
  2. dtree.js树的使用
  3. SpringBoot(六):SpringBoot整合Redis
  4. 【离散数学中的数据结构与算法】六 排列与组合二
  5. ueditor修改默认图片保存路径,ueditor根据楼盘ID保存图片路径
  6. 惠威T200B刷机 Q群
  7. matlab 四元方程求解,如何用Matlab求解如下一元四次方程,求指导
  8. 机器学习的transformer
  9. 雷击浪涌设计:保险丝选型
  10. JavaWeb(JSP中的JSTL核心标签学习) c:foreach报错500? 错误原因:ArrayList<String> people = new ArrayList<>()
  11. Machine Learning - A/B Test
  12. 8、ABPZero系列教程之拼多多卖家工具 添加手机注册登录功能
  13. Tensorflow模型各部分自定义方式
  14. 使用LumaQQ来开发QQ机器人
  15. SparkSubmit提交任务到yarn及报错解决方案
  16. UART(Universal Asynchronous Receiver/Transmitter,异步收发传输器)
  17. #E. 加加加树的边权
  18. vDSO - Virtual Dynamic Shared Object
  19. ZUI易入门Android之开源框架的使用
  20. SOLIDWORKS教育版可以试用吗?如何申请SOLIDWORKS教育版免费试用?

热门文章

  1. jdk自带的Unicode转utf8工具
  2. 基于Exchange 2003的搭建高可用的邮件平台 之一:群集的配置
  3. windows mobile5.0之“hello world”
  4. C# WebProxy POST 或者 GET
  5. EasyNetQ介绍
  6. Linux下安装MongoDB3.2.5(自测)
  7. nginx 如何实现读写限流的方法
  8. Win隐藏 Win10 中的3D对象、文档、音乐、图片、视频、下载、桌面7个文件夹
  9. Linux一键安装Lnmp
  10. php计算时间顺延3分,PHP关于strtotime函数的大坑