[数据结构] Set的使用与注意事项

news/2025/2/8 12:58:34 标签: 数据结构, java, 算法

目录

Set的说明

常见方法说明

注意事项

TreeSet使用案例


Set的说明

Set与Map主要的不同有两点: Set是继承自Collection的接口类,Set中只存储了Key.

常见方法说明

方法解释
boolean add(E e)添加元素,但重复元素不会被添加成功
void clear()清空集合
boolean contains(Object o)判断o是否在集合中
Iterator<E> iterator()返回迭代器
boolean remove(Object o)删除集合中的o
int size()返回集合中元素的个数
boolean isEmpty()检测set是否为空,空返回true,否则返回false
Object[] toArray()将set中的元素转换为数组返回
boolean containsAll(Collection<?> c集合c中的元素是否在set中全部存在,是返回true,否则返回false
boolean addAll(Collection<? extends E> c)将集合c中的元素添加到set中,可以达到去重的效果

注意事项

  1. Set是继承自Collection的一个类接口
  2. Set中只存储了Key,并且要求key一定要唯一(key不可以重复)
  3. TreeSet的底层是使用Map来实现的, 其使用key与Object的一个默认对象作为键值对插入到Map中的
  4. Set最大的功能就是对集合中的元素进行去重
  5. 实现Set接口的常用类有TreeSet和HashSet, 还有一个LinkedHashSet, LinkedHashSet是在HashSet的基础上维护了一个双向链表来记录元素的插入次序.
  6. Set中的key不能修改,如果要修改,先将原来的删除掉, 然后再重新加入
  7. TreeSet中不能插入null的key,HashSet可以.
Set底层结构TreeSetHashSet
底层结构红黑树哈希桶
插入/删除/查找时间复杂度O(log_{2}n)O(1)
是否有序关于key有序不一定有序
线程安全不安全不安全
插入/删除/查找区别按照红黑树的特性来进行插入和删除1.先计算key哈希地址 2.然后进行插入和删除
比较与覆写key必须能够比较,否则会抛出ClassCastExcetion异常自定义类型需要覆写equals和hashCode方法
应用场景      需要key有序场景下key是否有序不关心,需要更高的时间性能

TreeSet使用案例

java">public static void TestSet() {
        Set<String> s = new TreeSet<>();
        // add(key) : 如果key不存在,则插入,返回true;
        // 如果key存在,返回false
        boolean isIn = s.add("1");
        System.out.println(isIn);
        s.add("2");
        s.add("3");
        s.add("4");
        s.add("5");
        isIn = s.add("1");
        System.out.println(isIn);
        System.out.println(s.size());
        System.out.println(s);

        // add(key): key如果是空,抛出空指针异常
        // s.add(null);

        //contains(key): 如果key存在,返回true,否则返回false
        System.out.println(s.contains("1"));
        System.out.println(s.contains("10"));

        // remove(key): key存在,删除成功返回true
        //              key不存在,删除失败,返回false
        //              key为空,抛出空指针异常
        s.remove("1");
        System.out.println(s);

        s.remove("10");
        System.out.println(s);
        Iterator<String> it = s.iterator();
        while(it.hasNext()) {
            System.out.println(it.next() + " ");
        }
        System.out.println();
    }

http://www.niftyadmin.cn/n/5844873.html

相关文章

Chrome 浏览器 支持多账号登录和管理的浏览器容器解决方案

根据搜索结果&#xff0c;目前没有直接提到名为“chrometable”的浏览器容器或插件。不过&#xff0c;从功能描述来看&#xff0c;您可能需要的是一个能够支持多账号登录和管理的浏览器容器解决方案。以下是一些可能的实现方式&#xff1a; 1. 使用 Docker 容器化部署 Chrome …

CVPR2021 | VMI-FGSM VNI-FGSM | 通过方差调整增强对抗攻击的可迁移性

Enhancing the Transferability of Adversarial Attacks through Variance Tuning 摘要-Abstract引言-Introduction相关工作-Related Work方法-Methodology动机-Motivation基于方差调整的梯度攻击-Variance Tuning Gradient-based Attacks不同攻击的关系-Relationships among V…

亚博microros小车-原生ubuntu支持系列:24 巡线驾驶

这篇跟之前的颜色识别类似&#xff0c;亚博microros小车-原生ubuntu支持系列&#xff1a;21 颜色追踪-CSDN博客 1、程序功能说明 程序启动后&#xff0c;调整摄像头的俯仰角&#xff0c;把摄像头往下掰动&#xff0c;使得摄像头可以看到线&#xff0c;然后点击图像窗口&#…

golang命令大全13--相关资源与学习路径【完】

1、官方资源 Go 官方文档&#xff1a; https://golang.org/doc/提供详细的语言特性、标准库和工具链的文档。 Go Blog&#xff1a; https://blog.golang.org/包含关于 Go 语言最新特性、优化和实践的文章。 Go Modules 文档&#xff1a; https://golang.org/ref/mod深入解…

JPG、PNG、GIF有什么区别?

JPG、PNG、GIF是三种常见的数字图像格式&#xff0c;它们各自具有不同的特点和适用场景。以下是它们之间的主要区别以及如何进行选择&#xff1a; 一、JPG与PNG、GIF的区别 1. JPG&#xff08;JPEG&#xff09;&#xff1a; 特点&#xff1a;JPG是一种有损压缩的图像格式&…

go结构体详解

结构体简介 Golang 中没有“类”的概念&#xff0c;Golang 中的结构体和其他语言中的类有点相似。和其他面向对象语言中的类相比&#xff0c;Golang 中的结构体具有更高的扩展性和灵活性。 Golang 中的基础数据类型可以表示一些事物的基本属性&#xff0c;但是当我们想表达一…

如何导入第三方sdk | 引入第三方jar 包

0. 背景1. 上传私有仓库2. 使用本地文件系统 0. 背景 对接一些第三方功能&#xff0c;会拿到第三方的sdk&#xff0c;也就是jar包&#xff0c;如何导入呢 1. 上传私有仓库 最好的方式就是将第三方jar包&#xff0c;上传到私有的仓库&#xff0c;这样直接正常在pom引用即可如果只…

【R语言】plyr包和dplyr包

一、plyr包 plyr扩展包主要是实现数据处理中的“分割-应用-组合”&#xff08;split-apply-combine&#xff09;策略。此策略是指将一个问题分割成更容易操作的部分&#xff0c;再对每一部分进行独立的操作&#xff0c;最后将各部分的操作结果组合起来。 plyr扩展包中的主要函…