学习笔记,仅供参考,有错必纠


HashSet

HashSet实现了Set接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。

HashSet存储字符串并遍历

package com.guiyang.object;
import java.util.HashSet;public class Demo1_HashSet {public static void main(String[] args) {HashSet<String> hs = new HashSet<>();boolean b1 =  hs.add("a");hs.add("b");boolean b2 =  hs.add("a");//向Set集合中存储重复元素将返回Falsehs.add("110");hs.add("120");hs.add("130");System.out.println(b1);System.out.println(b2);System.out.println(hs);for (String string : hs) {System.out.println(string);}}
}

输出:

true
false
[110, a, b, 130, 120]
110
a
b
130
120

由以上的运行结果,我们可以发现Set集合有:无索引,不可重复,存取不一致的特点。且它重写了toString方法。

HashSet保证元素唯一性原理

  • HashSet原理

    • 我们使用Set集合的目的是为了去掉重复元素, 如果在存储时逐个调用equals()方法进行比较, 那么存储效率会很低,而哈希算法则提高了去重复的效率, 降低了使用equals()方法的次数;
    • 当HashSet调用add()方法存储对象的时候, 先调用对象的hashCode()方法得到一个哈希值, 然后在集合中查找是否有哈希值相同的对象:
      • 如果没有哈希值相同的对象就直接存入集合;
      • 如果有哈希值相同的对象, 就和哈希值相同的对象逐个进行equals()比较,比较结果为false就存入, true则不存储。
  • 将自定义类的对象存入HashSet去重复
    • 类中必须重写hashCode()和equals()方法;
    • hashCode():属性相同的对象返回值一定相同, 属性不同的返回值很可能不同(提高效率);
    • equals(): 属性相同返回true, 属性不同返回false,返回值为false时,存储该对象。

LinkedHashSet

具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。此实现与 HashSet 的不同之外在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,即按照将元素插入到 set 中的顺序(插入顺序)进行迭代。

简而言之,就是既保证元素唯一性,也保证元素存储顺序

  • 举个例子
package com.guiyang.restudy3;
import java.util.LinkedHashSet;public class D2LinkedHashSet {public static void main(String[] args) {LinkedHashSet<String> lhs = new LinkedHashSet<>();lhs.add("a");lhs.add("a");lhs.add("a");lhs.add("a");lhs.add("b");lhs.add("c");lhs.add("d");System.out.println(lhs);}
}

输出:

[a, b, c, d]

第三次学JAVA再学不好就吃翔(part89)--HashSet相关推荐

  1. 第三次学JAVA再学不好就吃翔(part107)--字符流的拷贝

    学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流的拷贝 拷贝纯文本文件 注意事项 自定义字符数组的拷贝 IO流 字符流的拷贝 拷贝纯文本文件 zzz.txt: 安徽财经大学 JAVA代码: pa ...

  2. 第三次学JAVA再学不好就吃翔(part106)--字符流

    学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流输入流FileReader 字符流是什么 FileReader类构造方法 举个例子 字符流输出流FileWriter FileWriter构造方法 ...

  3. 第三次学JAVA再学不好就吃翔(part46)--Scanner类

    学习笔记,仅供参考 文章目录 Scanner类 Scanner获取数据出现的问题 Scanner类 概述 Scanner是在java.util包下的一个类,使用该类时我们需要导包.这个类被final修 ...

  4. 第三次学JAVA再学不好就吃翔(part117)--单例设计模式

    学习笔记,仅供参考,有错必纠 文章目录 多线程 单例设计模式 饿汉式 懒汉式 第三种格式 Timer类 线程的五种状态 多线程 单例设计模式 单例设计模式,即保证类在内存中只有一个对象,如何保证类在内 ...

  5. 第三次学JAVA再学不好就吃翔(part109)--LineNumberReader类

    学习笔记,仅供参考,有错必纠 IO流 LineNumberReader类 该类继承自java.io.BufferedReader,该类可以跟踪行号的缓冲字符输入流.此类定义了方法 setLineNum ...

  6. 第三次学JAVA再学不好就吃翔(part108)--带缓冲的字符流

    学习笔记,仅供参考,有错必纠 文章目录 IO流 带缓冲的字符流 BufferedReader和BufferedWriter readLine和newLine方法 IO流 带缓冲的字符流 Buffere ...

  7. 第三次学JAVA再学不好就吃翔(part7)--基础语法之运算符

    学习笔记,仅供参考 文章目录 JAVA基础语法 运算符 算数运算符 算术运算符 ++和-- 赋值运算符 关系运算符 JAVA基础语法 运算符 什么是运算符 就是对常量和变量进行操作的符号. 运算符的分 ...

  8. 第三次学JAVA再学不好就吃翔(part115)--多线程

    学习笔记,仅供参考,有错必纠 文章目录 多线程 多线程引入 什么是线程 多线程并行和并发的区别 Java程序运行原理 多线程的实现方式 多线程实现的方式1 多线程程序实现的方式2 以上两种实现方式的区 ...

  9. 第三次学JAVA再学不好就吃翔(part113)--对象操作流

    学习笔记,仅供参考,有错必纠 对象操作流 对象操作流可以将一个对象写出, 或者读取一个对象到程序中,也就是执行了序列化和反序列化的操作. 举个例子 先构造一个Role类: package com.gu ...

  10. 第三次学JAVA再学不好就吃翔(part104)--flush和close

    学习笔记,仅供参考,有错必纠 flush和close flush方法 对于写出数据来说,当缓冲区满了之后,缓冲区中的数据会自动写出,但是当缓冲区没有满时,调用flush方法,那么缓冲区就会被刷新,数据 ...

最新文章

  1. CF570D Tree Requests(dsu on tree)
  2. 洛谷P3688/uoj#291. [ZJOI2017]树状数组
  3. A-Grade Browser By Yahoo
  4. Java HashMap的死循环的启示
  5. Windows Server 2003显示中文为乱码(方框)的问题
  6. 复制Excel分类汇总结果的三种方法
  7. 五指棋,贪吃蛇,中国银行ATM源码链接
  8. Leetcode589.N-ary Tree Preorder TraversalN叉树的前序遍历
  9. ext store 数据修改_Vue 组件数据通信方案总结
  10. Reno7系列全球首发IMX709超感光猫眼镜头:OPPO/索尼联合打造
  11. 在微信中调用ajax出现的问题
  12. vue-slot插槽
  13. 浣溪沙·江畔芦花【两首】
  14. 国外一些DICOM资源下载网址
  15. mib节点 snmp trap_snmp trap编写
  16. 【面向对象】DDD(一):传统开发模式 VS DDD 开发模式
  17. 廊坊金彩教育:怎么优化标题
  18. python穷举法列举_穷举法
  19. 曼哈顿距离最小生成树(树状数组)
  20. Java P2298 Mzc和男家丁的游戏

热门文章

  1. 计算机系统基础:程序与运算
  2. 数据结构与算法:树与二叉树python实现
  3. swot分析法案例_新媒体小白如何上手案例分析(SWOT分析法)
  4. python设置全局变量失败_Python全局变量与global关键字常见错误解决方案
  5. servlet-新建maven报错:web.xml is missing and <failOnMissingWebXml> is set to true
  6. 开源大数据周刊-第102期
  7. Exchange 2010 数据库副本加载后复制状态一直是失败并搁置故障分析
  8. springmvc 后台向页面EasyUI的Datagrid传递数据(JSon格式)
  9. java中的字符串相关知识整理
  10. Android隐藏状态栏、导航栏