HashSet的使用

简介: HashSet的使用

Collection下的子类:

List

  有序(存储顺序和取出顺序一致),可重复

Set

  无序(存储顺序和取出顺序不一致),唯一

  HashSet:它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。

  注意:虽然Set集合的元素无序,但是,作为集合来说,它肯定有它自己的存储顺序,

  而你的顺序恰好和它的存储顺序一致,这代表不了有序,你可以多存储一些数据,就能看到效果。

eg:

public class SetDemo {
  public static void main(String[] args) {
    // 创建集合对象
    Set<String> set = new HashSet<String>();

    // 创建并添加元素
    set.add("hello");
    set.add("java");
    set.add("world");
    set.add("java");
    set.add("world");

    // 增强for
    for (String s : set) {
      System.out.println(s);
    }
  }
}

eg 2 : HashSet:存储字符串并遍历

 问题:为什么存储字符串的时候,字符串内容相同的只存储了一个呢?

 通过查看add方法的源码,我们知道这个方法底层依赖 两个方法:hashCode()和equals()。

 步骤:

  1.首先比较哈希值

  2.如果相同,继续走,比较地址值或者走equals()

  3.如果不同,就直接添加到集合中

  4.按照方法的步骤来说:

  5.先看hashCode()值是否相同

   5.1.相同:继续走equals()方法

    5.1.1.返回true: 说明元素重复,就不添加

    5.1.2.返回false:说明元素不重复,就添加到集合

  5.2.不同:就直接把元素添加到集合

  6.如果类没有重写这两个方法,默认使用的Object()。一般来说不同相同。

  7.而String类重写了hashCode()和equals()方法,所以,它就可以把内容相同的字符串去掉。只留下一个。

public class HashSetDemo {
  public static void main(String[] args) {
    // 创建集合对象
    HashSet<String> hs = new HashSet<String>();

    // 创建并添加元素
    hs.add("hello");
    hs.add("world");
    hs.add("java");
    hs.add("world");

    // 遍历集合
    for (String s : hs) {
      System.out.println(s);
    }
  }
}

目录
相关文章
|
11月前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
154 0
|
8月前
|
前端开发 数据库
Promise.allSettled() 和 Promise.all() 有什么区别?
Promise.allSettled() 和 Promise.all() 有什么区别?
239 74
|
10月前
|
存储 Java Serverless
HashMap的底层数据结构是怎样的
在Java中,HashMap是一种基于哈希表的Map接口实现,以其高效的数据存取能力而广泛使用。本文将深入探讨HashMap的底层数据结构,揭示其如何通过数组、链表和红黑树的结合来优化性能。
|
10月前
|
前端开发 JavaScript UED
CSS滚动效果和视差滚动的原理、应用及其对用户体验的影响。从平滑滚动到元素跟随,再到滚动触发动画
本文探讨了CSS滚动效果和视差滚动的原理、应用及其对用户体验的影响。从平滑滚动到元素跟随,再到滚动触发动画,这些效果增强了页面的吸引力和互动性。视差滚动通过不同层次元素的差异化移动,增加了页面的深度感和沉浸感。文章还讨论了实现方法、性能优化及案例分析,旨在为设计师和开发者提供实用指导。
239 7
|
9月前
|
监控 架构师 Java
Java虚拟机调优的艺术:从入门到精通####
本文作为一篇深入浅出的技术指南,旨在为Java开发者揭示JVM调优的神秘面纱,通过剖析其背后的原理、分享实战经验与最佳实践,引领读者踏上从调优新手到高手的进阶之路。不同于传统的摘要概述,本文将以一场虚拟的对话形式,模拟一位经验丰富的架构师向初学者传授JVM调优的心法,激发学习兴趣,同时概括性地介绍文章将探讨的核心议题——性能监控、垃圾回收优化、内存管理及常见问题解决策略。 ####
|
11月前
|
缓存 NoSQL 应用服务中间件
【开发系列】秒杀系统的设计
【开发系列】秒杀系统的设计
|
存储 Java 索引
Java 中 List、Set、Map 和 Queue 之间的区别
【8月更文挑战第22天】
280 0
|
人工智能 JavaScript 测试技术
《AIGC+软件开发新范式》--10.阿里云参编业内首个代码大模型标准,通义灵码获 2023 AI4SE “银弹” 案例
在AI 热度持续上升的当下,阿里云推出AI智能编码助手—通义灵码。通义灵码是一款基于阿里云通义代码大模型打造的智能编码助手,基于海量优秀开源代数据集和编程教科书训练,为开发者带来高效、流畅的编码体验。
445 2
|
监控 NoSQL MongoDB
MongoDB的可用性
【6月更文挑战第6天】MongoDB的可用性
113 1
|
存储 安全 Java
Java的Map接口及其实现类的技术性文章
Java的Map接口及其实现类的技术性文章
161 0