不重复,无索引,不能重复元素,没有索引;

HashSet集合:

此时实现Set接口,有哈希表(HashMap的一个实例)支持,哈希表意味着查询速度很快,

是无序的,即元素的存取的顺序可能不一致;

且此实现也不是同步的,即多线程的;

其中,能用iterator迭代器因为是继承集合的祖宗类collection接口的;

没有索引,所以不能使用普通for循环;

不重复,所以第二个add(1)没有添加进去;

HashSet是无序的,所以添加顺序是132,打印取出可能是123等;

哈希值:

HashSet存储数据的结构是哈希表,哈希表的底层是数组加链表,jdk1.8版本之后加入了红黑树;

Object类源码中:

其中,点hashCode和toString方法都是Object类的方法,

打印的取出的哈希值为10进制的整数值;

直接打印对象名的时候,默认执行打印这个对象名存储地址的toString方法,调用的是Object祖宗类的toString方法,实际是打印栈内存中对象名存储的指向堆内存对象的地址值,是16进制的,

和它的哈希值即系统随机分配十进制的模拟逻辑地址是10进制和16进制相互转换的关系;

如果子类覆盖重写hashCode方法:

覆盖重写之后:

虽然地址是一样的,但是两个对象是不等的;

String类覆盖重写了Object类的hashCode方法:

其中,s1和s2两个不同对象的元素一样,但是是不同的两个对象,而哈希值一样,说明String类覆盖重写了Object类的hashCode()方法;

特例: “重地” 和 “通话” 是两个特殊的字符串,内容不一样,哈希值一样;

哈希表的原理解析:

Set集合存储不重复的原理:

不同的对象,但是对象的元素内容一样,哈希值肯定一样,也是重复的;

特例就是 “重地” “通话” 两个字符串,哈希冲突,哈希值一样,但是元素不一样;

HashSet集合存储自定义的元素:

自定义的person类:

其中,除了这两个框框中三个覆盖重写的方法,就是正常定义的一个类person;

其中,==双等于还是比较的两个对象是不是同一个,p1和p2还是两个不同的对象;

equals没有重写比较的是两个元素的地址值,person类中重写equals方法之前p1和p2的哈希值是不同的,重写了之后是相同的,哈希值也是地址值,和实际存储的物理地址类似,10进制和16进制的转换关系,所以两个地址值的相等不相等是一致的;
当哈希值相同,equals为true的时候,被认为是重复对象(包含元素相同)但不是同一个对象,不存储;
对象是封装了元素组成的,同一个元素对象不一定是同一个;

Set接口——HashSet集合的更多相关文章

  1. Java学习(set接口、HashSet集合)

    一.set接口 概念:set接口继承自Collection接口,与List接口不同的是,set接口所储存的元素是不重复的. 二.HashSet集合 概念:是set接口的实现类,由哈希表支持(实际上是一 ...

  2. Java学习:Set接口与HashSet集合存储数据的结构(哈希表)

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

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

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

  4. Java 数据类型:集合接口Collection之Set接口HashSet类;LinkedHashSet;TreeSet 类

    Collection 之 Set 实现类: HashSet TreeSet 特点: 无序. 元素不可重复. (如果试图添加一个已经有的元素到一个Set集合中,那么会添失败,add()方法返回false ...

  5. Java API —— Set接口 & HashSet类 & LinkedHashSet类

    1.Set接口     1)Set接口概述         一个不包含重复元素的 collection,无序(存储顺序和取出顺序不一致),唯一.  (List有序,即存储顺序和取出顺序一致,可重复) ...

  6. JAVA学习第三十六课(经常使用对象API)— Set集合:HashSet集合演示

    随着Java学习的深入,感觉大一时搞了一年的ACM,简直是明智之举,Java里非常多数据结构.算法类的东西,理解起来就轻松多了 Set集合下有两大子类开发经常使用 HashSet集合 .TreeSet ...

  7. Java基础学习(四)-- 接口、集合框架、Collection、泛型详解

    接口 一.接口的基本概念 关键字为:Interface,在JAVA编程语言中是一个抽象类型,是抽象方法的集合.也是使用.java文件编写.   二.接口声明 命名规范:与类名的命名规范相同,通常情况下 ...

  8. Set接口HashSet实现类

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

  9. 数据结构-List接口-LinkedList类-Set接口-HashSet类-Collection总结

    一.数据结构:4种--<需补充> 1.堆栈结构:     特点:LIFO(后进先出);栈的入口/出口都在顶端位置;压栈就是存元素/弹栈就是取元素;     代表类:Stack;     其 ...

随机推荐

  1. 批量查询"_mget"

    1.不同index的批量查询GET /_mget{ "docs":[{ "_index":"test_index1", "_typ ...

  2. FreeMarker详解

    什么是 FreeMarker? FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具. 它不是面向最终用 ...

  3. SSAS下玩转PowerShell

     操作SSAS数据库的方法有非常多,是否有一种能够方法能够通过脚本自己主动去做这些事呢,比方处理分区,创建备份以及监视SSAS的执行状况.   原文地址: http://www.mssqltips ...

  4. MySQL大表DROP删除小技巧(转)

    在日常工作中,经常会遇到历史大表从主库上迁移到备份机,以便腾出主库空间,那么如果你直接drop table 后,可能会引起数据库抖动,连接数升高等问题,从而影响业务. 那么用一个小技巧,即可轻松平滑的 ...

  5. java 根据word xml模板生成word

    这里用的是poi相关jar包以及freemarker插值技术实现,poi相关jar包这里不再述说 1,编辑word并保存为xml 2,把xml后缀改为ftl文件 3,前端代码 // alert(jso ...

  6. 常见的local variable 'x' referenced before assignment问题

    def fun1(): x = 5 def fun2(): x *= 2 return x return fun2() 如上代码,调用fun1() 运行会出错:UnboundLocalError: l ...

  7. python连接redis

    一.首先,要下载redis pip3 install redis 二.连接redis import redis #拿到一个redis的链接 conn=redis.Redis('127.0.0.1',6 ...

  8. Java通过POI读取Excel

    package com.hd.all.test.testjava; import java.io.File; import java.io.FileInputStream; import java.i ...

  9. MVC View小技巧

    1.在View中添加命名空间引用 1)直接在.cshtml文件中添加 @using MvcMusicStore.Models 2)在Views文件夹的web.config文件中添加,对整个Views文 ...

  10. ROSETTA使用技巧随笔--控制Log输出等级

    一般运行ROSETTA,屏幕上的Log很多,而且很复杂,让我们看着眼晕,现在我们可以通过控制Log等级来控制屏幕上输出的东西.  Integer Level 0 Fatal 100 Error 200 ...