博客
关于我
java集合-set
阅读量:797 次
发布时间:2023-03-28

本文共 1385 字,大约阅读时间需要 4 分钟。

Set接口与HashSet详解

Set接口简介

Set接口用于存储无序的,不可重复的数据。其核心特性是无序性和不可重复性。与Collection接口不同,Set接口没有定义新的方法,所有操作都基于Collection中的方法实现。

Set的基本要求

任何类如果想实现Set接口,必须重写以下两个方法:

  • hashCode():确保相等的对象具有相同的散列码。
  • equals():判断两个对象是否相等时,遵循以下规则:
    • 如果两个对象是同一个类实例,返回true。
    • 如果两个对象是不同类实例,返回false。
  • 这些方法的设计必须保持一致性,避免因散列码不一致导致的逻辑错误。

    HashSet的底层实现

    HashSet的底层采用哈希表( HashMap)来存储数据。其初始容量为16,当存储数据量达到75%时,容量会自动扩大为原来的2倍(如16→32→64→128...)。

    // HashSet的构造方法  
    public HashSet(Collection
    c) {
    this.map = new HashMap<>(Math.max((int) (c.size() / 0.75) + 1, 16));
    this.addAll(c);
    }

    HashSet的常用操作

    HashSet支持集合中常见的操作,如添加、删除、判断存在、清空和迭代等。以下是示例代码:

    HashSet
    hashSet = new HashSet<>();
    hashSet.add("lwh");
    hashSet.add("slw");
    hashSet.remove("lwh");
    System.out.println("包含 'lwh' 吗?" + hashSet.contains("lwh"));
    System.out.println("集合大小为:" + hashSet.size());
    System.out.println("集合是否为空?" + hashSet.isEmpty());
    Iterator
    iterator = hashSet.iterator();
    while (iterator.hasNext()) {
    System.out.println(iterator.next());
    }

    添加元素的过程

    当尝试向HashSet中添加一个元素时,系统会执行以下步骤:

  • 调用元素的hashCode()方法,计算其哈希值。
  • 根据哈希值确定元素在底层数组中的存放位置。
  • 检查该位置是否已有元素:
    • 如果没有,则添加成功。
    • 如果有,则比较新元素与已有元素的哈希值:
      • 如果不同,则添加成功。
      • 如果相同,则调用元素的equals()方法:
        • 如果返回true,则添加失败。
        • 如果返回false,则添加成功。
  • 这种机制保证了HashSet的高效性和唯一性。

    总结

    HashSet作为Set接口的重要实现类,具有以下特点:

  • 无序性:存储数据的位置由哈希值决定,顺序无关。
  • 不可重复性:通过equals()方法判断时,若返回true,则该元素已存在,添加失败。
  • HashSet的底层采用哈希表存储,能够在O(1)时间复杂度内完成查找、添加和删除操作,适合用于需要快速数据存取和操作的场景。

    转载地址:http://vdhfk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现打格点算法(附完整源码)
    查看>>
    Objective-C实现批量修改文件类型算法(附完整源码)
    查看>>
    Objective-C实现找出一个数的质因数primeFactors算法(附完整源码)
    查看>>
    Objective-C实现找出三角形从上到下的最大路径算法(附完整源码)
    查看>>
    Objective-C实现找出买卖股票的最大利润算法(附完整源码)
    查看>>
    Objective-C实现找出二维数组中的鞍点(附完整源码)
    查看>>
    Objective-C实现找出由两个 3 位数字的乘积构成的最大回文数的算法 (附完整源码)
    查看>>
    Objective-C实现找出矩阵的最大最小值(附完整源码)
    查看>>
    Objective-C实现找到一个数字数组的中值算法(附完整源码)
    查看>>
    Objective-C实现找到具有 500 个除数的第一个三角形数算法(附完整源码)
    查看>>
    Objective-C实现找到最近的点对之间的距离算法(附完整源码)
    查看>>
    Objective-C实现抓包实例(附完整源码)
    查看>>
    Objective-C实现抽签抓阄(附完整源码)
    查看>>
    Objective-C实现抽象工厂模式(附完整源码)
    查看>>
    Objective-C实现拉格朗日插值法(附完整源码)
    查看>>
    Objective-C实现拷贝二进制文件(附完整源码)
    查看>>
    Objective-C实现指定内存空间获取时间的函数(附完整源码)
    查看>>
    Objective-C实现按位倒序(附完整源码)
    查看>>
    Objective-C实现按位运算符乘以无符号数multiplyUnsigned算法(附完整源码)
    查看>>
    Objective-C实现排队叫号系统(附完整源码)
    查看>>