HashSet集合介绍

java.util.HashSet是set 接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的(即
存取顺序
不一致)。java.util.HashSet底层的实现其实是个java.util.HashMap支持,由于我们暂时还未学习
,先做了
解。
HashSet是根据对象的哈希值来确定元素在集合中的存储位置,因此具有良好的存取和查找性能。保证元素唯一性的方式依赖于: hashcode与equals方法。
我们先来使用一下Set集合存储,看下现象,再进行原理的讲解:

public static void main(String[] args) {
HashSet<Integer> set = new HashSet<>();
//使用add方法往集合中添加元素
set.add(1);
set.add(3);
set.add(2);
set.add(1);
//使用迭代器遍历set集合
Iterator<Integer> it = set.iterator();
while(it.hasNext()){
Integer n = it.next();
System.out.println(n);
}
}

哈希值

Object类的hashCode:返回对象的内存地址经过处理后的结构,由于每个对象的内存地址都不一样,所以哈希码也不一样。

两个对象要完全相对必须哈希值一样。比较用equal()

Integer类的hashCode:返回的哈希码就是Integer对象里所包含的那个整数的数值,例如Integer i1=new Integer(100),i1.hashCode的值就是100 。由此可见,2个一样大小的Integer对象,返回的哈希码也一样

比较包装数值类型相等。用equal()

String类的哈希值

  String类重写Object类的hashCode方法

HashSet集合介绍-哈希值的更多相关文章

  1. HashSet集合介绍和哈希值

    HashSet集合介绍 ~java.util.Set接口 extends Collection 接口~Set接口的特点: 1.不允许存储重复的元素 2.没有索引,没有带索引的方法,也不能使用普通的fo ...

  2. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_06 Set集合_2_哈希值

    没有重写就是十进制的整数,重写了想返回多少就是多少. 创建Person类,没有写继承关系,默认会继承Object类 打开Object这个类 找到HashCode这个方法.就这一行代码.甚至都没有方法体 ...

  3. Java set接口之HashSet集合原理讲解

    Set接口 java.util.set接口继承自Collection接口,它与Collection接口中的方法基本一致, 并没有对 Collection接口进行功能上的扩充,只是比collection ...

  4. Java思考——HashSet集合如何保证元素的唯一性也就是不包含重复元素?

    首先将源码逐级找出来1.HashSet<String> hs=new HashSet<String>();         hs.add("hello"); ...

  5. HashSet集合的介绍和哈希值

    java.util.Set接口 extends Collection接口 Set接口的特点: 1.不允许存储重复的元素 2.没有索引,没有带索引的方法,也不能使用普通的for循环遍历 java.uti ...

  6. 红黑树规则,TreeSet原理,HashSet特点,什么是哈希值,HashSet底层原理,Map集合特点,Map集合遍历方法

    ==学习目标== 1.能够了解红黑树 2.能够掌握HashSet集合的特点以及使用(特点以及使用,哈希表数据结构) 3.能够掌握Map集合的特点以及使用(特点,常见方法,Map集合的遍历) 4.能够掌 ...

  7. Java 集合系列16之 HashSet详细介绍(源码解析)和使用示例

    概要 这一章,我们对HashSet进行学习.我们先对HashSet有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashSet.内容包括:第1部分 HashSet介绍第2部分 HashSe ...

  8. 【转】Java 集合系列16之 HashSet详细介绍(源码解析)和使用示例--不错

    原文网址:http://www.cnblogs.com/skywang12345/p/3311252.html 概要 这一章,我们对HashSet进行学习.我们先对HashSet有个整体认识,然后再学 ...

  9. HashSet HashTable HashMap的区别 及其Java集合介绍

    (1)HashSet是set的一个实现类,hashMap是Map的一个实现类,同时hashMap是hashTable的替代品(为什么后面会讲到). (2)HashSet以对象作为元素,而HashMap ...

随机推荐

  1. 五、kubernetes节点与令牌管理

    Kubernetes节点与令牌管理 一.令牌管理 查看令牌 [root@master ~]# kubeadm token list 删除令牌 [root@master ~]# kubeadm toke ...

  2. MQTT+esp32+nodered+springboot 智能家居项目 -- 项目准备

    1.后台系环境:idea  jdk8.0以上  maven   tomcat   spring boot 2.前端环境  nodejs  nodered 3.硬件环境: audrion   esp32 ...

  3. 嵌入式-C语言基础:二维数组

    二维数组的每个元素都是一个一维数组,例如int arr[2][3]={{1,2,3},{4,5,6}}; 下面通过几个例子来对二维数组进行深入了解:二维数组可以看作是一个父数组,他的每个元素都是一个一 ...

  4. 关于C#Section配置未初始化的问题

    转载 https://www.cnblogs.com/lxshwyan/p/10828305.html 如果使用了configSection节点,则configSection必须位于根节点的第0个.A ...

  5. 基于 Sealos 的镜像构建能力,快速部署自定义 k8s 集群

    Sealos 是一个快速构建高可用 k8s 集群的命令行工具,该工具部署时会在第一个 k8s master 节点部署 registry 服务(sealos.hub),该域名通过 hosts 解析到第一 ...

  6. Linux *.service文件详解

    什么是systemd service? systemd service是一种以.service 结尾的配置文件,是一个专用于Linux操作系统的系统与服务管理器.简单来说,用于后台以守护精灵(daem ...

  7. Spring Cloud Circuit Breaker 使用示例

    Spring Cloud Circuit Breaker 使用示例 作者: Grey 原文地址: 博客园:Spring Cloud Circuit Breaker 使用示例 CSDN:Spring C ...

  8. vscode分级文件夹

    如果vscode不小心设置成文件独立展开,一堆文件看着很乱 这样设置 首选项-设置-功能-资源管理器-compack folders 就可以折叠文件夹了

  9. python安装第三方库换源

    永久修改 pip config set global.index-url https://mirrors.aliyun.com/pypi/simple 其他 这个都属于pip 命令行,config 后 ...

  10. java并发数据结构之CopyOnWriteArrayList

    CopyOnWriteArrayList是一个线程安全的List实现,其在对对象进行读操作时,由于对象没有发生改变,因此不需要加锁,反之在对象进行增删等修改操作时,它会先复制一个对象副本,然后对副本进 ...