2021-11-18哈希值
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哈希值相关推荐
- 实战:怎样把间隔的几个commit整理成1个?-2021.11.18
实战:怎样把间隔的几个commit整理成1个?-2021.11.18 目录 文章目录 实战:怎样把间隔的几个commit整理成1个?-2021.11.18 目录 文档来源 实验环境 实验软件(无) 1 ...
- 2021.11.18 简单计算阶乘(多种方法)及 求阶乘的和
运用各种方法计算阶乘及阶乘之和 三种方法计算阶乘 一.利用for循环法 二.利用导入库法计算阶乘 三.利用函数递归法 在原有基础上计算阶乘之和 学习方向: 三种方法计算阶乘 一.利用for循环法 &q ...
- 2021.11.18周四 java学习日志
今天算是结束了redis的入门学习,下面是学习redis做的笔记,记录一下. 一.Redis的开启语法 1.redis服务运行正常 127.0.0.1:6379[1]> ping redis默认 ...
- 2021/11/18学习笔记:城市建成区的边界
老师让我做城市建成区的边界 卒 这咋做啊... 这小半个月都在做这个了... 把思路整理一下,免得以后忘记了. 数据来源: 1.夜间灯光数据:Chen Zuoqi, Yu Bailang*, Yang ...
- Java学习日报—2021/11/18
目录 一.JDK8常用的新特性 二.Spring的IOC 三.Spring的AOP 四.MVC 五.SpringBoot和SpringCloud的关系理解 一.JDK8常用的新特性 (1)Date/T ...
- 2021.11.18
通达信.dat文件怎样打开?在网上搜了几天,都没有答案,就连通达信DAT文件格式都没有找到,看来只能自己研究了.
- 读万卷书,行万里路 —— 2021.11.18早九点三十分
"世界是一本大书,若不到处走走,你看到的总会是同一页的内容." 长大了一些才发现,小时候总是被困在一个小山坳里,虽然不至于与世隔绝,但是大大限制了视野和自己的性格,然后变得短视和胆 ...
- 2021.11.18 动态内存中free函数
1. 回顾动态内存基础知识 #include<stdio.h> #include<stdlib.h> int main() {//动态开辟 10个空间 intint *p = ...
- md5值最大长度_豆长老之比特币-哈希值是什么11月16日分享篇
哈希值,或哈希散列(Hash),又称为哈希算法 是密码学里的经典技术,它是一种单向密码体制,是从明文到密码的不可逆过程,即只有加密没有解密过程.哈希算法将任意长度的二进制值映射为较短的固定长度的二进制 ...
- 《恋上数据结构第1季》哈希表介绍以及从源码分析哈希值计算
哈希表(Hash Table) 引出哈希表 哈希表(Hash Table) 哈希冲突(Hash Collision) JDK1.8的哈希冲突解决方案 哈希函数 如何生成 key 的哈希值 Intege ...
最新文章
- 日志中的秘密 Windows登录类型知多少?
- python filter()和reduce()函数用法详解
- mysql日期格式转化
- Git和SVN的区别,Git的使用方法大全
- java 入门程序_自学 Java 怎么入门?
- 排序算法(二)--堆排序(JAVA)
- GTK实现文本翻页(dailyNote.c)
- 剑指offer:二叉树打印成多行(层次遍历)
- nginx的反向代理、负载均衡、页面缓存、URL重写及读写分离
- 工频干扰频谱测量_力参数传感器的电阻应变测量系统
- 在走迷宫任务中实现强化学习(持续更新中)——第二课:移动体的路径规划(小川雄太郎《边做边学深度强化学习》项目复刻)
- 程序员怎样出版一本技术书
- 网络编程学习路线计划
- Python爬取第一电影天堂最新电影(5000多部)代码实例(一)
- QT 打开PDF文件或图片文件
- 计算机的人分类,计算机的分类
- HDU6578 2019HDU多校训练赛第一场 1001 (dp)
- 计算机专业排名211大学排名,计算机专业大学排名,计算机专业强的211!
- 数据结构与算法06-栈的应用
- 【绘图杂记16】Echarts 热力矩阵图
热门文章
- python os 常用方法_python中os常用方法详解
- 关闭软盘_乔布斯签名软盘驱动器即将开拍 成交价预计达7500美元
- BZOJ-1036-树的统计Count
- 2017年10月08日普及组 蜡烛
- LOJ #2733 [JOI2016春季合宿]Sandwiches (DP)
- php搜索文件名,php实现按文件名搜索文件的远程文件查找器
- 麒麟970怎么升级鸿蒙系统,华为这些手机无法升级鸿蒙系统,搭载麒麟970,只能遗憾错过...
- 2021-03-09 Local Lipschitz 可能存在 有限时间逃逸
- 实验十四 课程学习总结
- python验证卡普耶卡(D.R.Kaprekar)6174猜想