首页 > 编程语言 >java中Set的介绍与实现:HashSet、LinkedHashSet、TreeSet

java中Set的介绍与实现:HashSet、LinkedHashSet、TreeSet

时间:2024-10-09 16:53:49浏览次数:9  
标签:set LinkedHashSet HashSet 元素 System add Set println

在Java中,SetCollection 接口的一个子接口,它是一个不包含重复元素的集合,且通常不保证维护元素的有序或迭代顺序。Set 接口主要用于确保集合中每个元素的唯一性。

Set接口的主要方法:

  • boolean add(E e):将指定的元素添加到此集合中(如果它尚未在集合中)。
  • boolean remove(Object o):从集合中移除指定元素。
  • int size():返回集合中的元素数量。
  • boolean contains(Object o):检查集合是否包含指定元素。
  • Iterator<E> iterator():返回此集合的迭代器。

Set接口的主要实现类:

  1. HashSet
  2. LinkedHashSet
  3. TreeSetjava中TreeSet的介绍与实现

1. HashSet

HashSet 是基于 HashMap 实现的,它不保证元素的顺序,特别是它不保证该顺序恒久不变。

代码示例:

import java.util.HashSet;
import java.util.Set;

public class HashSetExample {
    public static void main(String[] args) {
        Set<Integer> set = new HashSet<>();
        set.add(1);
        set.add(2);
        set.add(3);
        set.add(1); // 重复元素,不会被添加

        System.out.println("HashSet: " + set); // 输出可能是:[1, 2, 3]

        // 添加元素
        set.add(4);
        System.out.println("After adding 4: " + set); // 输出可能是:[1, 2, 3, 4]

        // 移除元素
        set.remove(2);
        System.out.println("After removing 2: " + set); // 输出可能是:[1, 3, 4]

        // 检查是否包含元素
        boolean contains = set.contains(3);
        System.out.println("Contains 3: " + contains); // 输出:true
    }
}

2. LinkedHashSet

LinkedHashSetHashSet 的一个子类,它维护元素的插入顺序,或者在构造时所指定的顺序。

代码示例:

import java.util.LinkedHashSet;
import java.util.Set;

public class LinkedHashSetExample {
    public static void main(String[] args) {
        Set<Integer> set = new LinkedHashSet<>();
        set.add(1);
        set.add(2);
        set.add(3);
        set.add(1); // 重复元素,不会被添加

        System.out.println("LinkedHashSet: " + set); // 输出:[1, 2, 3]

        // 添加元素
        set.add(4);
        System.out.println("After adding 4: " + set); // 输出:[1, 2, 3, 4]

        // 移除元素
        set.remove(2);
        System.out.println("After removing 2: " + set); // 输出:[1, 3, 4]
    }
}

3. TreeSet

TreeSet 是基于 TreeMap 实现的,它可以确保元素处于排序状态,通常用于需要对元素进行排序的场合。

代码示例:

import java.util.TreeSet;
import java.util.Set;

public class TreeSetExample {
    public static void main(String[] args) {
        Set<Integer> set = new TreeSet<>();
        set.add(1);
        set.add(3);
        set.add(2);
        set.add(1); // 重复元素,不会被添加

        System.out.println("TreeSet: " + set); // 输出:[1, 2, 3]

        // 添加元素
        set.add(4);
        System.out.println("After adding 4: " + set); // 输出:[1, 2, 3, 4]

        // 移除元素
        set.remove(2);
        System.out.println("After removing 2: " + set); // 输出:[1, 3, 4]
    }
}

自定义排序请看:java中TreeSet的介绍与实现

总结

  • HashSet 提供快速查找,不保证元素顺序。
  • LinkedHashSet 提供快速查找,且维护元素插入顺序。
  • TreeSet 自动排序元素,适合需要有序数据的场合。

标签:set,LinkedHashSet,HashSet,元素,System,add,Set,println
From: https://blog.csdn.net/weixin_46028214/article/details/142789690

相关文章

  • 《 C++ 修炼全景指南:十四 》大数据杀手锏:揭秘 C++ 中 BitSet 与 BloomFilter 的神奇性
    本篇博客深入探讨了C++中的两种重要数据结构——BitSet和BloomFilter。我们首先介绍了它们的基本概念和使用场景,然后详细分析了它们的实现方法,包括高效接口设计和性能优化策略。接着,我们通过对比这两种数据结构的性能,探讨了在不同应用场景中的选择依据。最后,博客还涵盖......
  • 在K8S中,DaemonSet类型的资源特性有哪些?
    在Kubernetes(K8s)中,DaemonSet是一种特殊的控制器资源对象,其核心特性和用途使得它非常适合用于在集群的每个节点上运行守护进程或服务。以下是DaemonSet类型的资源特性的详细阐述:1.确保每个节点上运行Pod副本节点级部署:DaemonSet确保集群中的每个节点(或满足特定条件的节点)上都运......
  • PTA JAVA语言 面向对象程序设计 作业二 6-3 Person类 构造Person类。包括姓名(name),性
    6-3Person类 谢谢大佬关注,不定期分享学习笔记,希望大佬能多多支持,三连必回单位 山东科技大学构造Person类。包括姓名(name),性别(sex)和年龄(age)。提供所有属性的set和get函数,提供print函数打印其信息输入描述:姓名(name),性别(sex)和年龄(age)输出描述:用户信息裁判测......
  • vue2 setting配置
    {  "workbench.iconTheme":"vscode-icons",  "vsicons.dontShowNewVersionMessage":true,  "terminal.integrated.profiles.windows":{    "cmd":{      "path":"C:\\Windows......
  • Cannot find current proxy: Set 'exposeProxy' property on Advised to 'true' to ma
    这个错误通常发生在使用SpringAOP时,尤其是当你尝试访问AopContext.currentProxy(),但当前代理对象不可用时。下面是一些解决此问题的建议:1.启用 exposeProxy 属性确保你的AOP配置中设置了exposeProxy属性为true。这可以在使用注解或XML配置中进行设置使用注解如......
  • abc347E Set Add Query
    有数组A[N],初始时元素都为0,另外还有初始为空的集合S。依次处理以下Q组查询:给出整数x[i],如果S包含x[i],则从S中移除x[i],否则将x[i]加入S,记此时S的大小为|S|,把|S|加到集合中的每个元素i对应的A[i]中。求最终A[i]是多少。1<=N,Q<=2E5;1<=x[i]<=N分析:记录每个时刻集合S的大小,设元素u......
  • 练习题 - Scrapy爬虫框架 Settings 项目配置
    在使用Scrapy构建网络爬虫时,Settings框架配置是至关重要的部分。Settings是Scrapy框架的配置核心,它决定了爬虫的行为、请求的频率、用户代理的使用、数据存储等一系列关键功能。掌握Scrapy的配置设置,能够让你的爬虫更加高效、稳定和智能。通过合理配置,可以更好地模......
  • STL-set
    STLset头文件set主要包括set和multiset两个容器,分别是“有序集合”和“有序多重集合”即前者的元素不能重复,而后者可以包含若干个相等的元素set和multiset的内部实现是一棵红黑树,它们支持的函数基本相同include声明#include<set>函数声明set<int>s;structrec{…};......
  • ​解密 Go runtime.SetFinalizer 的使用
    解密Goruntime.SetFinalizer的使用原创 GoOfficialBlog GoOfficialBlog  2024年10月05日18:45 中国香港 听全文如果我们想在对象GC之前释放一些资源,可以使用returns.SetFinalizer。这就像在函数返回前执行 defer 来释放资源一样。例如:1:使用runtime.......
  • ES6中扩展运算符...与Set结合使用
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title><......