Java之Set的使用场景
2.Set使用场景
API介绍:
java.util.Set接口和java.util.List接口一样,同样继承自Collection接口,
它与Collection接口中的方法基本一致,并没有对Collection接口进行功能上的扩充,
只是比Collection接口更加严格了。与List接口不同的是,Set接口中元素无序,
并且都会以某种规则保证存入的元素不出现重复。Set集合有多个子类,
这里我们介绍其中的
java.util.HashSet、
java.util.LinkedHashSet这两个集合。
特点:都会以某种规则保证存入的元素不出现重复,Set接口中元素无序
①元素不出现重复
②元素无序( 指 存取 无序)
哈希表:只要往哈希表中存储自定义对象,那么该自定义对象 所属的类 必须重写hashCode&equals方法
⑴HashSet集合
底层是通过HashMap实现的 底层new HashMap对象 ,只用了 key 并没有使用 value value指向统一地址 new Object()
API介绍:
java.util.HashSet是Set接口的一个实现类,它所存储的元素是不可重复的,
并且元素都是无序的(即存取顺序不一致)。java.util.HashSet底层的实现其实
是一个java.util.HashMap支持,HashSet是根据对象的哈希值来确定元素在集合中的存储位置,
因此具有良好的存取和查找性能。保证元素唯一性的方式依赖于:hashCode与equals方法。
特点:
①元素不重复
②存取顺序不一致
③良好的存取和查找性能
④元素唯一性的方式依赖于:hashCode与equals方法
HashSet集合存储数据的结构(哈希表):
在JDK1.8之前,哈希表底层采用数组+链表实现,即使用链表处理冲突,
同一hash值的链表都存储在一个链表里。但是当位于一个桶中的元素较多,
即hash值相等的元素较多时,通过key值依次查找的效率较低。
而JDK1.8中,哈希表存储采用数组+链表+红黑树实现,
当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找时间。
总而言之,JDK1.8引入红黑树大程度优化了HashMap的性能,
那么对于我们来讲保证HashSet集合元素的唯一,其实就是根据对象的
hashCode和equals方法来决定的。如果我们往集合中存放自定义的对象,
那么保证其唯一,就必须复写hashCode和equals方法建立属于当前对象的比较方式。
总结:1.8之前是通过 哈希表底层采用数组+链表实现
1.8中是通过 哈希表存储采用数组+链表+红黑树实现(链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找时间)
保证元素其唯一,必须重写hashCode和equals方法建立属于当前对象的比较方式
HashSet存储自定义类型元素(重点):
给HashSet中存放自定义类型元素时,需要重写对象中的hashCode和equals方法,
建立自己的比较方式,才能保证HashSet集合中的对象唯一
⑵LinkedHashSet
HashSet保证元素唯一,可是元素存放进去是没有顺序的,那么我们要保证有序,怎么办呢
在HashSet下面有一个子类java.util.LinkedHashSet,它是 链表和哈希表 组合的一个数据存储结构。
Java之Set的使用场景的更多相关文章
- Java 常用List集合使用场景分析
Java 常用List集合使用场景分析 过年前的最后一篇,本章通过介绍ArrayList,LinkedList,Vector,CopyOnWriteArrayList 底层实现原理和四个集合的区别.让 ...
- 简单模拟Java中反射的应用场景
有人说Java是一门静态语言.那么何为静态语言,动态语言又是什么? 1.动态语言 是一类在运行时可以改变其结构的语言:例如新的函数.对象.甚至代码可以 被引进,已有的函数可以被删除或是其他结构上的变化 ...
- 八大排序算法详解(动图演示 思路分析 实例代码java 复杂度分析 适用场景)
一.分类 1.内部排序和外部排序 内部排序:待排序记录存放在计算机随机存储器中(说简单点,就是内存)进行的排序过程. 外部排序:待排序记录的数量很大,以致于内存不能一次容纳全部记录,所以在排序过程中需 ...
- Java之Map的使用场景
总结之 Map接口 的使用场景(day04) Map: Map中的集合,元素是成对存在的(理解为夫妻).每个元素由键与值两部分组成,通过键可以找对所对应的值 Map中的集合不能包含重复的键,值可以重复 ...
- Java设计模式六大原则之场景应用分析
定义:不要存在多于一个导致类变更的原因. 通俗的说.即一个类仅仅负责一项职责. 问题由来:类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而须要改动类T时,有可能会导致原本执行正 ...
- Java反射机制的适用场景及其利与弊 ***
一.反射的适用场景是什么? 1).Java的反射机制在做基础框架的时候非常有用,有一句话这么说来着:反射机制是很多Java框架的基石.而一般应用层面很少用,不过这种东西,现在很多开源框架基本都已经给你 ...
- Java中应用多线程的场景?
最典型的应用比如tomcat,tomcat内部采用的就是多线程,上百个客户端访问同一个web应用,tomcat接入后都是把后续的处理扔给一个新的线程来处理,这个新的线程最后调用到我们的servlet程 ...
- Java基础学习总结(75)——Java反射机制及应用场景
什么是Java反射机制? JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的以及动态调用对象的方法的功能称为 ...
- 长篇图解java反射机制及其应用场景
一.什么是java反射? 在java的面向对象编程过程中,通常我们需要先知道一个Class类,然后new 类名()方式来获取该类的对象.也就是说我们需要在写代码的时候(编译期或者编译期之前)就知道我们 ...
随机推荐
- memset()初始化为1的那些事
问题代码: #include <stdio.h> #include <string.h> int main() { ]; int a; while(~scanf("% ...
- 百度谷歌雅虎三大搜索引擎比较和如何配置谷歌访问助手访问Google搜索服务
引言: 由于近期网上盛传”百度搜索引擎已死“的消息,引发个人对于搜索引擎的思考.百度作为最大的中文搜索引擎,确实有着很大声誉,再加上本地化的优势,正成为国人们的首选,但是作为一名技术开发人员,使用搜索 ...
- 基于R语言的时间序列分析预测
数据来源: R语言自带 Nile 数据集(尼罗河流量) 分析工具:R-3.5.0 & Rstudio-1.1.453 #清理环境,加载包 rm(list=ls()) library(forec ...
- 2017-2018 Exp7 网络欺诈技术防范 20155214
目录 Exp7 网络欺诈技术防范 实验内容 信息收集 知识点 Exp7 网络欺诈技术防范 实验内容 实验环境 主机 Kali 靶机 Windows 10 实验工具 平台 Metaploit 信息收集 ...
- 20155238 2016-2017-2 《JAVA程序设计》第八周学习总结
教材学习内容总结 第十四章 NIO NIO使用频道(Channel)来衔接数据节点,处理数据时,NIO可以让你设定缓冲区(Buffer)容量, 在缓冲区对感兴趣的数据区块进行标记,对于这些标记,提供了 ...
- Luogu P3227 [HNOI2013]切糕
%%ZZKdalao上课讲的题目,才知道网络流的这种玄学建模 我们先想一想,如果没有D的限制,那么想当于再每一根纵轴上选一个权值最小的点再加起来 我们对应在网络流上就是每一根纵轴上的点向它下方的点用权 ...
- C#用Infragistics 导入导出Excel(一)
最近项目中有数据的导入导出Excel的需求,这里做简单整理. 公司用的是Infragistics的产品,付费,不需要本地安装Office. 有需要的朋友可以下载 Infragistics.2013.2 ...
- java过滤器Filter笔记
一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术之一,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp,Servlet, 静 ...
- VS 远程调试 Azure Web App
如果能够远程调试部署在 Azure 上的 Web App,将会极大的提高我们修复 bug 的效率.Visual Studio 一贯以功能强大.好用著称,当然可以通吃基于 Azure 应用的创建.发布和 ...
- 用 IIS 搭建 mercurial server
mercurial server 对于代码管理工具,更多的人可能对 Git 更熟悉一些(Git太火了).其实另外一款分布式代码管理工具也被广泛的使用,它就是 mercurial.当多人协作时最好能够通 ...