AJPFX关于Set接口学习笔记及总结
Set接口中的方法和Collection中方法一致的。Set接口取出方式只有一种,迭代器。
|--HashSet:底层数据结构是哈希表,线程是不同步的。无序,高效;
HashSet集合保证元素唯一性:通过元素的hashCode方法,和equals方法完成的。
当元素的hashCode值相同时,才继续判断元素的equals是否为true。
如果为true,那么视为相同元素,不存。如果为false,那么存储。
如果hashCode值不同,那么不判断equals,从而提高对象比较的速度。
|--LinkedHashSet:有序,hashset的子类。
|--TreeSet:对Set集合中的元素的进行指定顺序的排序。不同步。TreeSet底层的数据结构就是二叉树。
哈希表的原理:
1,对对象元素中的关键字(对象中的特有数据),进行哈希算法的运算,并得出一个具体的算法值,这个值 称为哈希值。
2,哈希值就是这个元素的位置。
3,如果哈希值出现冲突,再次判断这个关键字对应的对象是否相同。如果对象相同,就不存储,因为元素重复。如果对象不同,就存储,在原来对象的哈希值基础 +1顺延。
4,存储哈希值的结构,我们称为哈希表。
5,既然哈希表是根据哈希值存储的,为了提高效率,最好保证对象的关键字是唯一的。
这样可以尽量少的判断关键字对应的对象是否相同,提高了哈希表的操作效率。
对于ArrayList集合,判断元素是否存在,或者删元素底层依据都是equals方法。
对于HashSet集合,判断元素是否存在,或者删除元素,底层依据的是hashCode方法和equals方法。
TreeSet:
用于对Set集合进行元素的指定顺序排序,排序需要依据元素自身具备的比较性。
如果元素不具备比较性,在运行时会发生ClassCastException异常。
所以需要元素实现Comparable接口,强制让元素具备比较性,复写compareTo方法。
依据compareTo方法的返回值,确定元素在TreeSet数据结构中的位置。
TreeSet方法保证元素唯一性的方式:就是参考比较方法的结果是否为0,如果return 0,视为两个对象重复,不存。
注意:在进行比较时,如果判断元素不唯一,比如,同姓名,同年龄,才视为同一个人。
在判断时,需要分主要条件和次要条件,当主要条件相同时,再判断次要条件,按照次要条件排序。
TreeSet集合排序有两种方式,Comparable和Comparator区别:
1:让元素自身具备比较性,需要元素对象实现Comparable接口,覆盖compareTo方法。
2:让集合自身具备比较性,需要定义一个实现了Comparator接口的比较器,并覆盖compare方法,并将该类对象作为实际参数传递给TreeSet集合的构造函数。
第二种方式较为灵活
转载于:https://blog.51cto.com/14314113/2396816
AJPFX关于Set接口学习笔记及总结相关推荐
- Java自学.接口学习笔记!
接口学习笔记 文章目录 接口学习笔记 1.接口的概述与生活中的举例 2.接口定义的基本格式 3.接口的抽象方法 3.1接口抽象方法的定义 3.2接口的抽象方法使用 4.接口的默认方式 4.1接口的默认 ...
- 阿里云Apsara Clouder专项技能认证-实现调用API接口-学习笔记
Apsara Clouder专项技能认证-实现调用API接口-学习笔记 阿里云的一个小认证,闲来无事,考一下 一.API简介 API的概念 API(Application Programming In ...
- 【vn.py学习笔记(二)】vn.py底层接口 学习笔记
[vn.py学习笔记(二)]vn.py底层接口 学习笔记 1 CTP API的工作原理 1.1 CTP介绍 1.2 API功能介绍 1.3 CTP API文件 1.4 API 通用规则 2 CTP A ...
- RISCV 向量指令集和NICE接口学习笔记
本文档链接 https://blog.csdn.net/weixin_42487906/article/details/115437890 RISCV向量指令集学习 参考链接 https://gith ...
- VGA 接口 学习笔记
VGA定义 VGA的全称是Video Graphics Array,即视频图形阵列,是一个使用模拟信号进行视频传输的标准.是 IBM 于1987年提出的一个使用类比讯号的电脑显示标准.这个标准已对于现 ...
- 接口学习笔记(2009.11.24)
了解接口,主要是为了一道经典面试题:接口与抽象类的区别,对接口的理解却很少,现在学习一下. 接口只包含方法.属性.事件或索引器的签名.成员的实现是在实现接口的类或结构中完成的. Interface n ...
- Java并发39:Executor系列--ScheduleExecutorService接口学习笔记
[超级链接:Java并发学习系列-绪论] 本章主要学习ScheduleExecutorService接口. 1.ScheduleExecutorService接口概述 @since 1.5 Sched ...
- HttpSessionActivationListener接口 学习笔记
实现了HttpSessionActivationListener接口的 JavaBean 对象可以感知自己被活化和钝化的事件 当绑定到 HttpSession 对象中的对象将要随 HttpSessio ...
- webservice接口与HTTP接口学习笔记
一.webservice 的概念 Web 是使应用程序可以与平台和编程语言无关的方式进行相互通信的一项技术.Web 服务是一个软件接口,它描述了一组可以在网络上通过标准化的 XML 消息传递访问的操作 ...
最新文章
- 数字信号处理基础----FM的调制与解调
- 4 款 MySQL Binlog 日志处理工具对比,谁才是王者?
- ASPxGridView EditFormLayout修改 TextBox文本长度
- SpringMVC报错The request sent by the client was syntactically incorrect ()
- js中使用slice进行补0日期和时间
- 雷军亲曝小米 10 四大猛料!
- java 图形化界面 布局管理器
- e: 无法定位软件包 python-pip_关于Sony镜头不同系列定位的最全面分析
- 【2020牛客寒假基础算法训练营】第二场总结
- [PAT B1023]组个最小数
- json格式转换工具包
- PDF文件在线转换HTML的方法
- 你知道的企业文化理念有哪些?
- mysql火焰图_【性能】如何使用perf和火焰图分析系统性能?
- 黑马教程python入门之基础笔记day1/2
- 转 shell编程100例
- Linux shell: ls命令详解
- 作业一:我与软件工程相约
- 如何画好设计素描?美术加推荐尝试这些方法~
- iwconfig 安装_ubuntu 无线网卡安装 | 学步园
热门文章
- “因为这 4 个回答,我决定录用这位软件工程师!”
- @程序员,什么才是“2020-1024”的正确打开姿势?
- “地理智慧 链接未来”,2020 GIS 软件技术大会主题大会召开
- 太拼了:谷歌第一编程语言小白也能学会!
- 第二十章:异步和文件I/O.(十一)
- Sublime Text的使用-Mac
- vs2017 编码约定——.editorconfig文件
- webpack v3 结合 react-router v4 做 dynamic import — 按需加载(懒加载)
- 批量更新日期字段中的年
- OpenStack 架构图