【集合框架】JDK1.8源码分析HashSet LinkedHashSet(八)

一、前言

  分析完了List的两个主要类之后,我们来分析Set接口下的类,HashSet和LinkedHashSet,其实,在分析完HashMap与LinkedHashMap之后,再来分析HashSet与LinkedHashSet,就会变成异常简单,下面开始进行分析。

二、数据结构

  2.1 HashSet数据结构

  老规矩,先上数据结构,因为HashSet底层是基于HashMap 或者 LinkedHashMap实现的,所以HashSet数据结构就是HashMap或者LinkedHashMap的数据结构,因为前面已经分析过了,所以不再累赘。直接看这里,JDK1.8源码分析之HashMap(一) && JDK1.8源码分析之LinkedHashMap(二)

  2.2 LinkedHashSet数据结构

  LinkedHashSet基于LinkedHashMap实现,所以数据结构直接看这里。JDK1.8源码分析之LinkedHashMap(二)

三、源码分析

  3.1 HashSet  

  1. 类的继承关系

public class HashSet<E>extends AbstractSet<E>implements Set<E>, Cloneable, java.io.Serializable

  2. 类的属性 

public class HashSet<E>extends AbstractSet<E>implements Set<E>, Cloneable, java.io.Serializable
{// 版本序列号static final long serialVersionUID = -5024744406713321676L;// 键值Mapprivate transient HashMap<E,Object> map;// 用作所有键对应的值,键所对应的值都相等private static final Object PRESENT = new Object();
}
View Code

  说明:HashSet中由于只包含键,不包含值,由于在底层具体实现时,使用的HashMap或者是LinkedHashMap(可以指定构造函数来确定使用哪种结构),我们知道HashMap是键值对存储,所以为了适应HashMap存储,HashSet增加了一个PRESENT类域(类所有),所有的键都有同一个值(PRESENT)

  3. 其他分析

  add、contains、remove函数都是基于HashMap或者LinkedHashMap做的操作,之前已经给出源码分析,不再累赘。

  3.2 LinkedHashSet

  1. 类的继承关系  

public class LinkedHashSet<E>extends HashSet<E>implements Set<E>, Cloneable, java.io.Serializable

  说明LinkedHashSet继承自HashSet,也实现了一些接口,不再累赘。

  2. 其他说明

  LinkedHashSet会调用HashSet的父类构造函数,让其底层实现为LinkedHashMap,这样就很好的实现了LinkedHashSet所需要的功能。

四、总结

  HashSet、LinkedHashSet与HashMap、LinkedHashMap相对应。分析了HashMap、LinkedHashMap的源码之后,HashSet、LinkedHashSet也就很浅显易懂了。谢谢各位园友观看~

 

  

转载于:https://www.cnblogs.com/leesf456/p/5309809.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/418751.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js函数节流

我们知道&#xff0c;js有些事件例如resize&#xff0c;mousemove等是会不间断触发的&#xff0c;例如我们简单的一个scroll事件&#xff1a; function scrollFn(){console.log(1) } window.onscrollscrollFn 我们需要在滚动的时候去做一些事情&#xff0c;如上图可见&#…

前端学习(1841):前端面试题之redux管理状态机制

对Redux基本理解 redux是一个独立专门用于做状态管理的JS库, 不是react插件库它可以用在react, angular, vue等项目中, 但基本与react配合使用作用: 集中式管理react应用中多个组件共享的状态和从后台获取的数据 Redux的工作原理Redux使用扩展 使用react-redux简化redux的编码使…

结对开发——返回一个整数数组中最大子数组的和 (首尾相接版)

一、题目及题目要求 题目:返回一个整数数组中最大子数组的和。要求&#xff1a;&#xff08;1&#xff09;输入一个整形数组&#xff0c;数组里有正数也有负数。&#xff08;2&#xff09;数组中连续的一个或多个整数组成一个子数组&#xff0c;每个子数组都有一个和。&#xf…

同意按钮,倒计时10秒,同意按钮变为可提交的

HTML代码&#xff1a; 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">2 <html xmlns"http://www.w3.org/1999/xhtml">3 <head>4 <meta h…

前端学习(1850)vue之电商管理系统电商系统vue脚手架安装

1. 先下载node.js&#xff0c;下载地址&#xff1a;https://nodejs.org/en/download/ 找个目录保存&#xff0c;解压下载的文件&#xff0c;然后配置环境变量&#xff0c;将下面的路径配置到环境变量中。 安装node 配置进环境变量 检查是否安装完成 2. npm配置 查看npm配置信息…

使用jquery获取url及url参数的方法及定义JQuery扩展方法

1、jquery获取url很简单&#xff0c;代码如下&#xff1a; window.location.href; 其实只是用到了javascript的基础的window对象&#xff0c;并没有用jquery的知识。 2、jquery获取url参数比较复杂&#xff0c;要用到正则表达式&#xff0c;所以学好javascript正则式多么重要的…

前端学习(1851)vue之电商管理系统电商系统vue创建项目

1输入命令vue-ui 2点击创建 3初始化 4手动配置项目 点击创建项目 创建完成 安装插件 点击安装即可 配置插件 点击依赖 安装依赖

在Google Maps 上点击标签后显示说明

JS如下&#xff1a; (function() { window.onload function() { // Creating an object literal containing the properties // you want to pass to the map var options { zoom: 3, center: new google.maps.LatLng(37.09, -95.71), mapTypeId: google.maps.MapTypeId.RO…

前端学习(1851)vue之电商管理系统电商系统配置ssh

1登录到码云 2设置 生成公钥 3添加公钥 验证成功

前端学习(1852)vue之电商管理系统电商系统托管码云上

1新建仓库 2执行命令 3添加git add . 3git add files 提交

前端学习(1853)vue之电商管理系统电商系统之git安装

1下载安装包 git官网&#xff1a; https://git-scm.com/download/win git阿里镜像&#xff1a; https://npm.taobao.org/mirrors/git-for-windows/ 2安装 基本傻瓜程序 上图红框内的选项是默认勾选的&#xff0c;建议不要动。绿色框1是决定是否在桌面创建快捷方式的。绿色框…

Beaglebone Black教程Beaglebone Black的引脚分配

Beaglebone Black教程Beaglebone Black的引脚分配 Beaglebone Black的引脚分配 绝大多数的微型开发平台都提供了一些称为GPIO的输入输出端口。这些端口可以让你使用软件和硬件来控制一些电子的东西&#xff0c;每个端口都被赋予了一个特定的功能——模拟或数字。大多数的微控制…

iOS Social框架

现在很多应用都内置“社交分享”功能&#xff0c;可以将看到的新闻、博客、广告等内容分享到微博、微信、QQ、空间等&#xff0c;其实从iOS6.0开始苹果官方就内置了Social.framework专门来实现社交分享功能&#xff0c;利用这个框架开发者只需要几句代码就可以实现内容分享。下…

前端学习(1856)vue之电商管理系统电商系统之安装mysql出现mysql报错:Can’t start server: Bind on TCP/IP port: 通常每个套接字地址(协议/网络地址

2020-07-26T11:44:29.778919Z 0 [ERROR] [MY-010262] [Server] Cant start server: Bind on TCP/IP port: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。

简单存取款机的实现---控制输入变量的规则

转载于:https://www.cnblogs.com/quanby/p/5335527.html