首页 > 其他分享 >3. Set

3. Set

时间:2024-12-22 22:20:43浏览次数:3  
标签:Set HashSet 对象 元素 equals hashCode 哈希

Set注重独一无二的性质,该体系集合用于存储无序(存入和取出的顺序不一定相同)元素,值不能重复,不会有多个元素引用相同的对象。
对象的相等性本质是对象hashCode值(java是依据对象的内存地址计算出的此序号)判断的,如果想要让两个不同的对象视为相等,就必须覆盖Object的hashCode方法和equals方法。

1. HashSet(Hash表)
哈希表存放的时哈希值。HashSet存储元素的顺序并不是按照存入时的顺序(和List显然不同)而是按照哈希值来存的,所以取数据也是按照哈希值取的。元素的哈希值是通过元素hashCode方法来获取的。
HashSet首先判断两个元素的哈希值,如果哈希值一样,接着会比较equals方法,如果equals结果为true,HashSet就视为同一个元素,如果equals结果为false就不是同一个元素。

哈希值相同equals为false的元素是怎么存储的,就是在同样的哈希值下顺延(可以认为哈希值相同的元素放在一个哈希桶中)。也就是哈希一样的存一列。如图一表示hashCode值不相同的情况;图2表示hashCode值相同,但equals不相同的情况。

HashSet通过hashCode值来确定元素在内存中的位置,一个hashCode位置上可以存放多个元素。

2. TreeSet(二叉树)
1)TreeSet是使用二叉树的原理对新add()的对象按照指定顺序(升序、降序),每增加一个对象都会进行排序,将对象插入二叉树指定的位置。
2)Integer和String对象都可以进行默认的TreeSet排序,而自定义类的对象是不可以的,自定义的类必须实现Comparable接口,并且覆写相应的compareTo()函数,才可以正常使用。
3)在覆写compare()函数时,要返回相应的值才能使TreeSet按照一定的规则来排序。
4)比较此对象与指定对象的顺序,如果该对象小于、等于、或大于指定对象,则分别返回负整数、零或正整数。

3. LinkedHashSet(HashSet+LinkedHashMap)
对于LinkedHashSet而言,它继承于HashSet,又基于LinkedHashMap来实现的。
LinkedHashSet底层使用LinkedHashMap来保存所有元素,它继承于HashSet,其所有的方法操作上又与HashSet相同,因此LinkedHashSet的实现上非常简单,只提供了四个构造方法,并通过传递一个标识参数,调用父类的构建器,底层构造一个LinkedHashMap来实现,在相关操作上与父类HashSet的操作相同,直接调用父类HashSet的方法即可。

标签:Set,HashSet,对象,元素,equals,hashCode,哈希
From: https://www.cnblogs.com/tim-zuo/p/18622668

相关文章

  • 【Basic Abstract Algebra】Exercises for Section 3.1 — Cosets and Lagrange's The
    Let\(G\)beafinitegroupand\(H<G\).If\([G:H]=2\),then\(gH=Hg\).Proof:If\([G:H]=2\),thenthereareonlytwocosetsof\(H\)in\(G\),andoneofthecosetsis\(H\)itself,i.e.,\[G=H\cupgH=H\cupHg,\]where\(H\cap......
  • offset explorer如何安装?附获取方式
    前言大家好,我是小徐啊。我们在Java开发的时候,有时候需要进行大数据的开发,或者需要使用消息队列,这个时候,就需要用到kafka这个组件了。而对于我们平常运维来说,最好有一个可视化的连接kafka的工具。今天小徐就来介绍一款连接Kafka的工具,是offsetexplorer,介绍下windows下如何安装。......
  • 封装红黑树实现map/set
    封装红黑树实现mymap和myset补充一下AVL树和红黑树的对比:#include<iostream>usingnamespacestd;#include<vector>#include<time.h>#include"RBTree.h"#include"AVLTree.h"voidTestTree(){ constintN=1000000; vector<int>v; v.......
  • Android 13.0 系统Settings主菜单wifi二级菜单去掉返回acitonbar功能
    1.前言 在13.0的系统ROM产品定制化开发中,在原生系统Settings的主菜单蓝牙wifi进入二级菜单中的页面中,最上面都有一个ActionBar的返回键,在某种情况下进行产品定制的时候,不需要这个返回键,所以接下来分析下这个返回键布局,来实现功能2.系统Settings主菜单蓝牙wifi二级菜单去......
  • 【Django】测试带有 CSRF 验证的 POST 表单 API 报错:Forbidden (CSRF cookie not set.
    【Django】测试带有CSRF验证的POST表单API报错:Forbidden(CSRFcookienotset.)问题描述Django使用Apifox测试POST表单报错。Forbidden(CSRFcookienotset.):/api/parse[20/Dec/202415:17:25]"POST//api/parseHTTP/1.1"4032855原因分析要在使......
  • mathjax 动态渲染 typeset问题
    使用mathjax渲染数理化公式,静态正常,动态内容出现问题,简单解决如下。<!DOCTYPEhtml><html><head><metacharset="utf-8"><scriptid="MathJax-script"asyncsrc="/wwwroot/lib/mathjax/es5/tex-chtml-full.min.js&quo......
  • offsetTop为啥会影响性能?
    offsetTop是一个只读属性,它返回元素的顶部相对于其包含块(通常是最近的已定位祖先元素)的偏移量。当在一个页面中频繁或大量使用offsetTop来获取元素的位置时,可能会影响性能,主要原因如下:1.强制同步布局(LayoutThrashing)每当访问offsetTop或其他与布局相关的属性(如offset......
  • Set-MMAgent -MaxOperationAPIFiles 的主要功能是设置 Microsoft Monitoring Agent (M
    mmagentApplicationLaunchPrefetching:FalseApplicationPreLaunch    :FalseMaxOperationAPIFiles    :8192MemoryCompression      :FalseOperationAPI        :FalsePageCombining        :FalsePS......
  • 「ARC118C」 Coprime Set
    题意给定\(n\),构造一个长度为\(n\)的数组,满足任意两个数不互质且不相同,所有数的最大公因数为\(1\),且每个数最大为\(10000\)。分析这种限制了数的大小,不限制大小和位置关系的构造题有一个套路。先找出几个最小的满足条件的数,然后找出延申的条件。对于本题,当\(n=3\)时,有......
  • 数据结构之旅:红黑树如何驱动 Set 和 Map
    一、红黑树1、定义        红黑树是一种二叉搜索树,在每个节点上增加一个存储位表示结点的颜色(红色或者黑色)。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保不会有一条路径比其他路径长出两倍,因而这种树是一种接近平衡的。和AVL(平衡二叉搜索树......