一.哈希值

  1. 哈希值其实就是一个int数字,我们可以把哈希值看成对象的一个标识,Object中的hashCode方法,可以获取到对象的哈希值

  2. Object中的hashCode方法是根据地址值进行计算的

  3. 不过一般哈希值不是根据地址值计算,而是根据对象的属性进行计算,这就需要在Object的子类中重写hashCode方法(idea中一般都用alt+insert快捷键重写,部分电脑用alt+fn+insert快捷键重)

二.HashSet存储自定义对象

  1.存储条件: HashSet存储自定义对象,保证元素的唯一性

  2.满足存储条件分析:

    2.1: 线比较两个对象哈希值(子类中需要重写Object中的hashCode()方法)

    2.2:   如果两个对象哈希值相同,调用equals方法进行比较(子类中需要重写Object中的equals()方法)

  代码演示:

    子类代码也没什么可以演示的,子类中重写的hashCode方法和equals()方法都是快捷键生  成的,若想研究方法内部可在idea中生成方法研究

  HashSet集合存储对象演示:

  

       //创建一个HashSet,用来保存Dog对象
Set<Dog> set = new HashSet<>();
set.add(new Dog("哮天犬", 18));
set.add(new Dog("旺财", 8));
set.add(new Dog("王可可", 3));
//添加一个集合中相同的对象,添加不会成功,子类中重写了hashSet方法和equal方法
set.add(new Dog("旺财", 8)); //遍历set集合,并打印每一个狗对象
for(Dog dog : set) {
System.out.println(dog);
}

三.LinkedHashSet是Set接口的一个实现类

  1. LinkedHash没有延续Set接口的无序特点,它是一个有序的Set集合

  2.  这个类内部出了一个哈希表,还有一个链表,

       链表的作用就是保证LinkedHashSet集合石有序的

  3. Set是无序的,LinkedHashSet就是一个不孝子,没有延续Set接口无序特点(实际上是青出于蓝,   子类更加强大的表现)

  代码演示LinkedHashSet集合是有序的:

    

         Set<String> set = new LinkedHashSet<>();
//添加元素
set.add("张三丰");
set.add("张翠山");
set.add("莫声谷");
set.add("张无忌");
set.add("宋远桥"); //打印set集合
System.out.println(set); //[张三丰, 张翠山, 莫声谷, 张无忌, 宋远桥] ,证实该集合是有序的

  

    

    

  

哈希值、HashSet、LinkedHashSet的更多相关文章

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

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

  2. HashSet集合介绍和哈希值

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

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

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

  4. List集合与Set集合(ArrayList,LinkedList,Vector,HashSet,LinkedHashSet,可变参数)

    List集合介绍及常用方法 import java.util.ArrayList; import java.util.Iterator; import java.util.List; /* java. ...

  5. 哈希集合——hashSet

    /**     哈希集合特点:存取顺序不确定,同一个哈希值的位置可以存放多个元素,                   哈希集合存放元素的时候是先判断哈希地址值:hashCode()是否相同,如果不同 ...

  6. HashSet,LinkedHashSet,TreeSet的区别

    Set接口Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false.Set判断两个对象相同不是使用==运算符,而是根据equals方法.也就是说,只要两个对象用eq ...

  7. win10下安装USB-Blaster哈希值错误

    插入usb-blaster后,无法安装驱动,一直显示感叹号,更新驱动后显示“文件的哈希值不在指定的目录”这样的错误提示,解决方法如下:1.Windows键+ R,输入shutdown.exe /r / ...

  8. 哈希值识别工具hash-identifier

    Hash Identifier可以用来识别各种类型的哈希值.在kali上使用方法很简单 (1)搜索hash-identifier (2)在HASH后面输入要识别的hash内容 (3)识别成功 wind ...

  9. Java中String的哈希值计算

    下面都是从String类的源码中粘贴出来的 private int hash; // Default to 0 public int hashCode() { int h = hash; if (h ...

随机推荐

  1. Go 初体验 - 令人惊叹的语法 - defer.1 - 基本概念和用法

    在我们编程时,难免遇见 流.远程连接.文件等 io 操作,为了高性能,我们不得不打开和关系这些 io 对象. 在 java.C# 语言里这些打开和关闭的操作都需要程序员自己选择操作时机,一般是在 io ...

  2. GDscript风格指南

    (惯例感谢godot开发组~~·) 缩进 缩进类型:Tabs (编辑器默认) 缩进大小:4 (编辑器默认) 每个缩进级别必须大于包含它的代码块. 良好的: for i in range(10): pr ...

  3. 0007-20180403-python-自动化基础学习000--while-if 循环实操

    python-自动化基础学习000 Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:54:25) [MSC v.1900 64 bit (AMD64 ...

  4. 连接mysql数据库,创建用户模型

    1.安装与配置python3.6+flask+mysql数据库 (1)下载安装MySQL数据库 (2)下载安装MySQL-python 中间件 (3)pip install flask-sqlalch ...

  5. 单源最短路——Dijkstara算法

    算法基本思想:每次找到离源点最近的一个顶点,然后以该顶点为中心进行扩展,最终得到源点到其余所有点的最短路径. 1.将所有的顶点分为两个部分:已知最短路程的顶点集合P和未知最短路径的顶点集合Q 2.设置 ...

  6. CentOS6.5系统,mysql数据库的安装

    1.查看数据库中已安装的版本: [mdata@bogon ~]$ yum list installed|grep mysqlmysql-libs.x86_64 5.1.71-1.el6 @anacon ...

  7. Linux 系统开启最大线程数 调优

    系统最大线程数说明 系统可开启的最大线程数,可根据系统本身负载配置进行调优. 查看系统最大线程数 1.查看系统开启的最大线程数. ulimit -u [root@izbp1brwu1w35r1dmj8 ...

  8. oracle insert、append、parallel、随后查询的redo与磁盘读写

    SQL> set autotrace traceonly statistics; SQL> insert into big_table_dir_test1 select * from bi ...

  9. freeswqitch odbc

    1.安装驱动 yum install unixODBC unixODBC-devel libtool-ltdl libtool-ltdl-devel -y yum install mysql-conn ...

  10. C# 控件置于最顶层、最底层

    btn.BringToFront();//将控件放置所有控件最前端 btn.SendToBack();//将控件放置所有控件最底端