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. 日志中的秘密 Windows登录类型知多少?
  2. python filter()和reduce()函数用法详解
  3. mysql日期格式转化
  4. Git和SVN的区别,Git的使用方法大全
  5. java 入门程序_自学 Java 怎么入门?
  6. 排序算法(二)--堆排序(JAVA)
  7. GTK实现文本翻页(dailyNote.c)
  8. 剑指offer:二叉树打印成多行(层次遍历)
  9. nginx的反向代理、负载均衡、页面缓存、URL重写及读写分离
  10. 工频干扰频谱测量_力参数传感器的电阻应变测量系统
  11. 在走迷宫任务中实现强化学习(持续更新中)——第二课:移动体的路径规划(小川雄太郎《边做边学深度强化学习》项目复刻)
  12. 程序员怎样出版一本技术书
  13. 网络编程学习路线计划
  14. Python爬取第一电影天堂最新电影(5000多部)代码实例(一)
  15. QT 打开PDF文件或图片文件
  16. 计算机的人分类,计算机的分类
  17. HDU6578 2019HDU多校训练赛第一场 1001 (dp)
  18. 计算机专业排名211大学排名,计算机专业大学排名,计算机专业强的211!
  19. 数据结构与算法06-栈的应用
  20. 【绘图杂记16】Echarts 热力矩阵图

热门文章

  1. python os 常用方法_python中os常用方法详解
  2. 关闭软盘_乔布斯签名软盘驱动器即将开拍 成交价预计达7500美元
  3. BZOJ-1036-树的统计Count
  4. 2017年10月08日普及组 蜡烛
  5. LOJ #2733 [JOI2016春季合宿]Sandwiches (DP)
  6. php搜索文件名,php实现按文件名搜索文件的远程文件查找器
  7. 麒麟970怎么升级鸿蒙系统,华为这些手机无法升级鸿蒙系统,搭载麒麟970,只能遗憾错过...
  8. 2021-03-09 Local Lipschitz 可能存在 有限时间逃逸
  9. 实验十四 课程学习总结
  10. python验证卡普耶卡(D.R.Kaprekar)6174猜想