Set接口介绍

2023-11-10


前言

Set接口是Collection接口的子类,其继承了所有方法。那么他有什么独特的特点呢,下来我们来研究一下Set接口以及她的实现类的特点


提示:以下是本篇文章正文内容,下面案例可供参考

一、Set接口:

1.Set接口特点:

数据是不能重复的、最多可以存储一个null值

2.Set的实现类:

HashSet、LinkedHashSet和TreeSet

Set接口提供的方法API:

在这里插入图片描述

二、HashSet

1.HashSet的特点:

1、HashSet不能保证数据有序
2、HashSet数据是不能重复的
3、HashSet是可以存储null值

2.HashSet的属性:

//map属性是存储数据的,是HashMap类型的数据
private transient HashMap<E,Object> map;
//PRESENT属性,HashMap中填充的value值 
private static final Object PRESENT = new Object();

3.HashSet的构造函数:

调用HashSet的构造函数发现其底层是实现了一个HashMap的

public HashSet() {
        map = new HashMap<>();
    }

    public HashSet(Collection<? extends E> c) {
        map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
        addAll(c);
    }

    public HashSet(int initialCapacity, float loadFactor) {
        map = new HashMap<>(initialCapacity, loadFactor);
    }


    public HashSet(int initialCapacity) {
        map = new HashMap<>(initialCapacity);
    }

4.HashSet方法:

public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }
    public boolean remove(Object o) {
        return map.remove(o)==PRESENT;
    }
    public void clear() {
        map.clear();
    }

由上面的源码我们可以发现HashSet底层实现是基于HashMap来实现的,将set中存储的值作为HashMap的key来处理,PRESENT是一个填充的value值

三、LinkedHashSet:

1.LinkedHashSet的特点:

1、数据有序
2、数据不能重复
3、数据是可以存储null的

2.LinkedHashSet的继承关系和构造器:

通过声明形式可知:其继承自HashSet,其继承了HashSet中所有的属性和方法

public class LinkedHashSet<E> extends HashSet<E>
    implements Set<E>, Cloneable, java.io.Serializable {
    public LinkedHashSet(int initialCapacity, float loadFactor) {
        super(initialCapacity, loadFactor, true);
    }
    public LinkedHashSet(int initialCapacity) {
        super(initialCapacity, .75f, true);
    }
    public LinkedHashSet() {
        super(16, .75f, true);
    }
    public LinkedHashSet(Collection<? extends E> c) {
        super(Math.max(2*c.size(), 11), .75f, true);
        addAll(c);
    }
}

通过声明形式可知:其继承自HashSet,其继承了HashSet中所有的属性和方法
构造函数调用父类HashSet中方法如下:

HashSet(int initialCapacity, float loadFactor, boolean dummy) {
        map = new <>(initialCapacity, loadFactor);
    }

LinkedHashSet的实现是基于LinkedHashMap来实现的
LinkedHashSet数据有序的特征是基于LinkedHashMap来保证的,其底层利用双向链表来实现的数据有序

3、LinkedHastSet的应用场景:

在去重的基础上数据有序

四、TreeSet

1.TreeSet的特点:

1、数据自然有序(自定义排序,实现Comparator接口)
2、数据不能重复
3、数据不能为null

2.属性:


 //TreeSet实现类的一共父接口实例用来存储数据
 private transient NavigableMap<E,Object> m;
 //PRESENT属性,HashMap中填充的value值 
private static final Object PRESENT = new Object();

3.构造器方法

通过源码可知:TreeSet底层是基于treeMap来实现的

TreeSet(NavigableMap<E,Object> m) {
        this.m = m;
    }
    public TreeSet() {
        this(new TreeMap<>());
    }
    public TreeSet(Comparator<? super E> comparator) {
        this(new TreeMap<>(comparator));
    }
    public TreeSet(Collection<? extends E> c) {
        this();
        addAll(c);
    }
    public TreeSet(SortedSet<E> s) {
        this(s.comparator());
        addAll(s);
    }

总结

当我们学习完Set的接口和他的实现类以后发现他们的实现都是基于对应Map的来实现,他的存在是为了我们只需要进行对单一数据操作来保证数据不重复等特点的使用的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Set接口介绍 的相关文章

随机推荐

  • Windows7 64位系统下安装 latex:texlive2019 和 texstudio

    1 下载及安装texlive2019 a 网上下载方法很多 TeX套装下载来这里 http www latexstudio net texsoftware b https www tug org texlive c https mirror
  • Ubuntu+Python环境做上位机

    最近需要制作程控电阻箱的上位机 使得大学毕业后就不再接触硬件的我无从下手 拿到机器后不知道怎么与其进行通信 Google上的资料也很少 现将我的环境搭建过程记录下来 希望对和我一样的小白有所帮助 软件环境 Ubuntu 16 04 pyth
  • AcWing4908. 饥饿的牛

    输入样例1 1 5 1 2 输出样例1 2 样例1解释 两捆干草在第 11 天早上被送到了牛棚 所以贝茜第 1 2 天有干草吃 输入样例2 2 5 1 2 5 10 输出样例2 3 样例2解释 两捆干草在第 1 天早上被送到了牛棚 所以贝茜
  • Spring简述

    Sping是什么 Spring主要模块 IOC DI依赖注入的三种方式 AOP 术语 Sping是什么 Spring是一个轻量级的开源框架 主要作用是为了简化开发 它以IOC 控制反转 和AOP 面向切面编程 为内核 Spring主要模块
  • 计算机辅助教学考博,2018年华中科技大学3319计算机辅助设计与制造考博大纲

    资源大小 0 1 10 0 MB 资源类型 rar 发布时间 2020 5 14 23 35 45 资源评分 资源简介 2018年华中科技大学3319计算机辅助设计与制造考博大纲 下载流程 考研真题 点击 考研试卷 下载 考博真题 点击 考
  • 物理机ubuntu系统--远程控制-不接显示器-使用虚拟显示器-设置分辨率1920*1080

    liunx系统与intel显卡驱动不兼容的机制问题 导致有些机器无法在没有显示器的情况下 不能进行远程 向日葵和TeamViewer都不行 因此使用虚拟显示器的软件Xorg 反正网上很多资料 本文只是添加图片 更加详细的过程 以及遇到的情况
  • STM32开发笔记02---新建库函数工程

    架构图 创建工程 首先我们先创建一个资料夹example 路径最好配置为全英文 然后分别在example资料夹内再创建6个资料夹 分别是 Doc Libraries Listing Output Project User 然后开启keil
  • Ethereum账户私钥管理之导出、导出keystore 文件

    目录 前言 一 理解keystore文件的导出 导入 二 导出keystore文件 三 导入keystore文件 并还原成为私钥
  • 软件体系结构实验报告-比较不同的软件架构风格

    报告内容 调试分析KWIC 理解不同架构风格 1 画出每一种风格对应程序的静态结构图 如类图 2 打印出程序的执行过程 3 使用一个较大的输入文本 测试每一种风格程序的性能 4 结合程序 总结每一种架构风格的特点 一 画出每一种风格对应程序
  • JS中将数组作为值添加到对象中

    1 条件 已有对象 myobject key1 value1 key2 value2 key3 value3 已有数组 myarray 1 2 3 4 5 6 2 需求 myobject key1 value1 key2 value2 ke
  • Windows删除Maven本地资源库中lastUpdate和repositories文件的脚本

    一 脚本 1 删除 lastUpdated的文件的脚本 1 在桌面新建txt文档 将后缀改为 bat 文件名称随意 2 添加内容如下 echo off set REPOSITORY PATH C softwore apache maven
  • 02.02.19

    做一件事开始觉得痛苦 别怕继续做下去 因为你已经进入到一个新的阶段 你在融入 因为这种痛苦是付出过的人才体会的到的 开始变得轻松但发现自己更渺小又是一个阶段 你已经融入了 继续的就是坚持 保持一颗 幼稚 上进 的心 走到最后 转载于 htt
  • VUE 实现两个select联动效果

    两个下拉框 当选择A的时候B会跟着联动 template代码
  • docker安装ros的一点记录

    docker本没有图形化界面 但是ros很多时候都要用到rviz来看数据 比较烦人的一件事情 ros的镜像本身的图形化显示本身给人一种没有做完的感觉 需要再做些事情才能正确显示 首先 ros的rviz显示需要opengl的正确支持 而ope
  • mysql [42000][1071] Specified key was too long; max key length is 767 bytes

    今天在MySQL中建立表的时候 报了一个错误 说是key太长了 超戳了767个字节 但是建表语句并有超过指定的长度啊 CREATE TABLE XXL JOB QRTZ JOB DETAILS SCHED NAME VARCHAR 120
  • (二)Ubuntu系统Pytorch环境配置

    1 前言 2 安装miniconda 3 安装Pytorch 4 安装CUDA和cuDNN 5 验证 环境配置系列 一 Ubuntu安装详细教程 从镜像制作到NVIDIA驱动安装全流程 超详细的图文教程 二 Ubuntu系统Pytorch环
  • 图解算法使用python吴灿铭 pdf_图解算法

    像小说一样有趣的算法入门书 算法是解决问题的一步步流程 也是计算机科学领域的核心主题 如今程序员 常用的算法已经经过了前人的探索 检验及证明 如果你想搞明白这些算法 又不想被困在繁琐的证明中 本书正是你的不二选择 这本图示丰富 引人入胜的实
  • 【数据结构】零基础树状数组笔记

    参考和引用 树状数组学习笔记 树状数组 数据结构详解与模板 可能是最详细的了 树状数组 简单介绍 树状数组小结 AcWing 241 楼兰图腾 的题解 树状数组求逆序对模板 转 树状数组逆序对 树状数组的作用 树状数组 也叫做二叉索引树 或
  • CMake 入门与进阶

    目录 cmake简介 cmake的下载 cmake 的使用方法 示例一 单个源文件 cmake生成的中间文件以及可执行文件都放在build目录下 示例二 多个源文件 示例三 生成库文件 动态库和静态库 修改库文件名字 最低版本要求 示例四
  • Set接口介绍

    文章目录 前言 一 Set接口 1 Set接口特点 2 Set的实现类 Set接口提供的方法API 二 HashSet 1 HashSet的特点 2 HashSet的属性 3 HashSet的构造函数 4 HashSet方法 三 Linke