Set接口——HashSet集合
不重复,无索引,不能重复元素,没有索引;
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还是两个不同的对象;
Set接口——HashSet集合的更多相关文章
- Java学习(set接口、HashSet集合)
一.set接口 概念:set接口继承自Collection接口,与List接口不同的是,set接口所储存的元素是不重复的. 二.HashSet集合 概念:是set接口的实现类,由哈希表支持(实际上是一 ...
- Java学习:Set接口与HashSet集合存储数据的结构(哈希表)
Set接口 java.util.Set接口 extends Collection接口 Set接口的特点: 不允许存储重复的元素 没有索引,没有带索引的方法,也不能使用普通的for循环遍历 java.u ...
- Java set接口之HashSet集合原理讲解
Set接口 java.util.set接口继承自Collection接口,它与Collection接口中的方法基本一致, 并没有对 Collection接口进行功能上的扩充,只是比collection ...
- Java 数据类型:集合接口Collection之Set接口HashSet类;LinkedHashSet;TreeSet 类
Collection 之 Set 实现类: HashSet TreeSet 特点: 无序. 元素不可重复. (如果试图添加一个已经有的元素到一个Set集合中,那么会添失败,add()方法返回false ...
- Java API —— Set接口 & HashSet类 & LinkedHashSet类
1.Set接口 1)Set接口概述 一个不包含重复元素的 collection,无序(存储顺序和取出顺序不一致),唯一. (List有序,即存储顺序和取出顺序一致,可重复) ...
- JAVA学习第三十六课(经常使用对象API)— Set集合:HashSet集合演示
随着Java学习的深入,感觉大一时搞了一年的ACM,简直是明智之举,Java里非常多数据结构.算法类的东西,理解起来就轻松多了 Set集合下有两大子类开发经常使用 HashSet集合 .TreeSet ...
- Java基础学习(四)-- 接口、集合框架、Collection、泛型详解
接口 一.接口的基本概念 关键字为:Interface,在JAVA编程语言中是一个抽象类型,是抽象方法的集合.也是使用.java文件编写. 二.接口声明 命名规范:与类名的命名规范相同,通常情况下 ...
- Set接口HashSet实现类
java.util.Set接口 extends Collection接口 Set特点: 1.不允许有重复的元素 2.没有索引,没有带索引的方法,也不能使用普通的for遍历 java.util.Hash ...
- 数据结构-List接口-LinkedList类-Set接口-HashSet类-Collection总结
一.数据结构:4种--<需补充> 1.堆栈结构: 特点:LIFO(后进先出);栈的入口/出口都在顶端位置;压栈就是存元素/弹栈就是取元素; 代表类:Stack; 其 ...
随机推荐
- php 的函数
一.函数定义及变量作用域 1. 函数的声明和调用 函数的目的是复用. [$variable=] function [name]([$param]){} 2. 变量的作用域 (1) 全局变量 函数内部想 ...
- ubuntu上make menuconfig出错
如果使用make menuconfig的方式配置内核,又碰巧系统没有安装ncurses库(ubuntu系统默认就没有安装此库),就会出现错误,错误信息大体上如下: *** Unable to find ...
- 【Python】脚本运行报错:IndentationError: unindent does not match any outer indentation level
[问题] 一个python脚本,本来都运行好好的,然后写了几行代码,而且也都确保每行都对齐了,但是运行的时候,却出现语法错误: IndentationError: unindent does not ...
- 如何暂停和继续运行Linux程序
我们通过shell窗口运行程序时,由于有的程序长时间运行,直到下班了都还没有返回运行结果.这个时候,我们又不能直接关闭shell窗口,不然前面的时间就白白运行了. 那有什么办法可以先暂停程序,明天再继 ...
- Http服务基础原理
http服务相关解释 http : Hyper Text Transfer Protocol, 80/tcp 超文本传输协议,基于tcp传输协议的80端口传输 html: Hyper Text M ...
- SQL——查询一段时间内每天的数据,按天将数据封装进行封存
DROP TABLE IF EXISTS `T_ROTA_RECORD`; CREATE TABLE `T_ROTA_RECORD` ( `id` ) NOT NULL AUTO_INCREMENT, ...
- centos mysql安装 完全版
在linux中安装数据库首选MySQL,Mysql数据库的第一个版本就是发行在Linux系统上,其他选择还可以有postgreSQL,oracle等 在Linux上安装mysql数据库,我们可以去其官 ...
- 静态文件link 数据库迁移命令 新建app命令
<link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css"& ...
- [Java in NetBeans] Lesson 14. ArrayList and Collections
这个课程的参考视频和图片来自youtube. 主要学到的知识点有: 1. Collection: container that contians objects. 2. Difference betw ...
- [Java in NetBeans] Lesson 10. For Loops
这个课程的参考视频和图片来自youtube. 主要学到的知识点有:(the same use in C/C++) 1. x++, x += 1; similar x--, x -= 1; x *= 2 ...