1.哈希值

DemoHashCode.java

package HashCode;/**   哈希值:是一个十进制的整数,由系统随机给出(就是对象的地址值,是一个逻辑地址,是模拟出来得到的地址,不是数据实际存储的物理地址)*   在object类有一个方法,可以获取对象的哈希值*   int hash Code()返回该对象的哈希值*   hasCode方法的源码:*       public native int hasCode()*       native:代表该方法调用的是本地操作系统的方法* */
public class DemoHashCode {public static void main(String[] args) {//Person类继承了Object类,所以可以使用Object类的hashCode方法Person person = new Person();System.out.println(person.hashCode());//460141958Person person1 = new Person();System.out.println(person1.hashCode());//1163157884/**   toString方法的源码*       return getClass().getName() + "@" + Integer.toHexString(hashCode)* */System.out.println(person);//HashCode.Person@1b6d3586System.out.println(person1);//HashCode.Person@4554617cSystem.out.println(person == person1);//false/** String类的哈希值* String类重写Object类的hashCode方法* */String s1 = new String("abc");String s2 = new String("abc");System.out.println(s1.hashCode());//96354System.out.println(s2.hashCode());//96354//两个比较特殊的System.out.println("重地".hashCode());//1179395System.out.println("通话".hashCode());//1179395}
}

2.HashSet集合存储数据的结构(哈希表)

先按哈希值把哈希值相同的分到一组,然后把相同哈希值挂在它下面,从而使速度非常快。

3.Set集合存储元素不能重复的原理


哈希表在横向上是数组,在纵向上是链表。
认定两个元素不同:哈希值不同且内容不同。内容不相同,哈希值不一定相同。哈希值不同,内容一定不同。
Demo01HashSetSaveString.java

package HashCode;import java.util.HashSet;
/*
*   Set集合不允许存储重复元素的原理
* */
public class Demo01HashSetSaveString {public static void main(String[] args) {//创建HashSet集合对象HashSet<String> set = new HashSet<>();String s1 = new String("abc");String s2 = new String("abc");set.add(s1);set.add(s2);set.add("重地");set.add("通话");set.add("abc");System.out.println(set);//[重地, 通话, abc]}
}

4.HashSet存储自定义类型元素

Demo01HashSetSavePerson.java

package HashCode02;import java.util.HashSet;/*
*   HashSet存储自定义类型元素
*   set集合报错元素唯一:
*         存储的元素(String,Integer,...Student...),必须重写hashCode方法和equals方法
*   要求:
*       同名同年龄的人,视为同一个人,只能存储一次
* */
public class Demo01HashSetSavePerson {public static void main(String[] args) {HashSet<Person> set = new HashSet<>();Person person = new Person("张三",19);Person person1 = new Person("张三",19);set.add(person);//System.out.println(set);//[Person{name='张三', age=19}]set.add(person1);System.out.println(set);//未重写时[Person{name='张三', age=19}, Person{name='张三', age=19}]}
}

Person.java

package HashCode02;import java.util.Objects;public class Person {private String name;private int age;@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Person person = (Person) o;return age == person.age && Objects.equals(name, person.name);}@Overridepublic int hashCode() {return Objects.hash(name, age);}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

5.LinkedHashSet集合

java.util.linkedHashSet集合 extends HashSet集合

  • LinkedHashSet集合特点:
  • 底层是一个哈希表(数组+链表/红黑树)+链表:多了一条链表(记录元素的存储顺序),保证元素有序

HashSet无序,不能重复;LinkedHashSet有序,不能重复。

2021-11-18哈希值相关推荐

  1. 实战:怎样把间隔的几个commit整理成1个?-2021.11.18

    实战:怎样把间隔的几个commit整理成1个?-2021.11.18 目录 文章目录 实战:怎样把间隔的几个commit整理成1个?-2021.11.18 目录 文档来源 实验环境 实验软件(无) 1 ...

  2. 2021.11.18 简单计算阶乘(多种方法)及 求阶乘的和

    运用各种方法计算阶乘及阶乘之和 三种方法计算阶乘 一.利用for循环法 二.利用导入库法计算阶乘 三.利用函数递归法 在原有基础上计算阶乘之和 学习方向: 三种方法计算阶乘 一.利用for循环法 &q ...

  3. 2021.11.18周四 java学习日志

    今天算是结束了redis的入门学习,下面是学习redis做的笔记,记录一下. 一.Redis的开启语法 1.redis服务运行正常 127.0.0.1:6379[1]> ping redis默认 ...

  4. 2021/11/18学习笔记:城市建成区的边界

    老师让我做城市建成区的边界 卒 这咋做啊... 这小半个月都在做这个了... 把思路整理一下,免得以后忘记了. 数据来源: 1.夜间灯光数据:Chen Zuoqi, Yu Bailang*, Yang ...

  5. Java学习日报—2021/11/18

    目录 一.JDK8常用的新特性 二.Spring的IOC 三.Spring的AOP 四.MVC 五.SpringBoot和SpringCloud的关系理解 一.JDK8常用的新特性 (1)Date/T ...

  6. 2021.11.18

    通达信.dat文件怎样打开?在网上搜了几天,都没有答案,就连通达信DAT文件格式都没有找到,看来只能自己研究了.

  7. 读万卷书,行万里路 —— 2021.11.18早九点三十分

    "世界是一本大书,若不到处走走,你看到的总会是同一页的内容." 长大了一些才发现,小时候总是被困在一个小山坳里,虽然不至于与世隔绝,但是大大限制了视野和自己的性格,然后变得短视和胆 ...

  8. 2021.11.18 动态内存中free函数

    1. 回顾动态内存基础知识 #include<stdio.h> #include<stdlib.h> int main() {//动态开辟 10个空间 intint *p = ...

  9. md5值最大长度_豆长老之比特币-哈希值是什么11月16日分享篇

    哈希值,或哈希散列(Hash),又称为哈希算法 是密码学里的经典技术,它是一种单向密码体制,是从明文到密码的不可逆过程,即只有加密没有解密过程.哈希算法将任意长度的二进制值映射为较短的固定长度的二进制 ...

  10. 《恋上数据结构第1季》哈希表介绍以及从源码分析哈希值计算

    哈希表(Hash Table) 引出哈希表 哈希表(Hash Table) 哈希冲突(Hash Collision) JDK1.8的哈希冲突解决方案 哈希函数 如何生成 key 的哈希值 Intege ...

最新文章

  1. 居民信息管理系统java_基于jsp的社区住户信息管理系统-JavaEE实现社区住户信息管理系统 - java项目源码...
  2. perl正则表达式-1
  3. Entity Framework 4 in Action读书笔记——第三章:查询对象模型基础(1)
  4. C++《STL和泛型编程》容器不带/带有成员函数总结
  5. 从 dig(nslookup) bind —— windows 下的域名解析服务器信息的查看
  6. 广域网协议之PPP,HDLC
  7. IIS Express URL Rewrite无效
  8. Spark提交任务到集群
  9. DHTML3(表格动态创建,删除行/列,表格行排序,行颜色交替高亮显示)
  10. iTerm2使用zmodem协议上传下载文件
  11. 鼠标移入移出时定时器加速的原因_2020年值得购买的鼠标有哪些?
  12. 计算机辅助设计排版,计算机辅助设计
  13. Opencv 傅立叶变换 傅立叶逆变换
  14. PCF8563实时时钟芯片51单片机简单例程
  15. 使用Blast2GO进行GO注释
  16. 如何捕获电脑病毒样本
  17. 用例图、功能模块图和数据库的区别
  18. 视差贴图(Parallax Mapping)
  19. 使用dubbo遇到了Unsatisfied dependency expressed through field ‘userService‘
  20. Elasticsearch-8.2.0安装问题

热门文章

  1. Magic Squares 魔板 (BFS+HASH)
  2. BZOJ 2734 [HNOI2012]集合选数 (状压DP、时间复杂度分析)
  3. 对应 网口_威纶通网口屏和西门子1200/1500绝对地址实现通讯
  4. 三轴联动c语言算法,(数控加工)虚拟轴数控机床的仿三轴控制.pdf
  5. github 运行python_Github Actions教程:运行python代码并Push到远端仓库
  6. antd 轮播图样式_React - AntD 走马灯组件前后切换面板
  7. 20210907 Engine and SDK in development
  8. poj/OpenJ_Bailian - 2528 离散化+线段树
  9. Python爬虫入门教程 1-100 CentOS环境安装
  10. Linux系统下 Apache+PHP 环境安装搭建