集合数据结构之哈希集、有序集合

一、集合(Set)

1. 定义

集合是一种无序的数据结构,主要用于存储不重复的元素。集合中的元素不能重复,因此适合用于需要唯一性的数据场景。集合提供了常用的操作,如添加、删除和检查元素是否存在。

2. 特点
  • 唯一性:集合中不允许有重复元素。
  • 无序性:集合中的元素没有特定的顺序。
  • 高效性:集合通常提供高效的元素查找、插入和删除操作。
3. 应用场景
  • 数据去重:从列表中去除重复元素。
  • 集合运算:进行并集、交集、差集等集合运算。
  • 快速查找:检查元素是否存在于数据集中。

二、哈希集(Hash Set)

1. 定义

哈希集是一种基于哈希表实现的集合,使用哈希函数将元素映射到哈希表的索引。由于哈希集依赖哈希函数,查找、插入和删除操作的平均时间复杂度为 O(1)。

2. 特点
  • 快速操作:由于哈希表的特性,基本操作(如添加、删除和查找)的时间复杂度为 O(1)。
  • 无序性:元素的存储没有顺序,不会按照插入的顺序排列。
  • 动态扩展:当元素数量超过一定阈值时,哈希集会自动扩展以保持性能。
3. 优缺点
  • 优点
    • 高效性:适合快速查找和插入操作。
    • 简单性:易于实现和使用。
  • 缺点
    • 无序性:不支持按顺序遍历元素。
    • 内存消耗:可能会有额外的内存开销,因为需要存储哈希表。
4. 应用场景
  • 去重操作:在处理数据时快速去除重复元素。
  • 快速查找:需要频繁查找元素的场景,如缓存实现。
5. 示例代码(Java 实现哈希集)
import java.util.HashSet;public class HashSetExample {public static void main(String[] args) {HashSet<String> hashSet = new HashSet<>();// 添加元素hashSet.add("Apple");hashSet.add("Banana");hashSet.add("Orange");hashSet.add("Banana"); // 重复元素,不会被添加// 打印集合System.out.println("哈希集中的元素: " + hashSet);// 检查元素是否存在System.out.println("是否包含 Apple? " + hashSet.contains("Apple"));// 删除元素hashSet.remove("Banana");System.out.println("删除 Banana 后的元素: " + hashSet);}
}

三、有序集合(Sorted Set)

1. 定义

有序集合是一种能够保持元素有序的集合,通常基于红黑树或其他排序算法实现。Java 中的 TreeSet 是一个典型的有序集合实现。

2. 特点
  • 排序性:元素根据自然顺序或自定义比较器进行排序。
  • 无重复元素:与一般集合相同,有序集合也不允许重复元素。
  • 范围查找:可以有效地执行范围查询,查找某一范围内的元素。
3. 优缺点
  • 优点
    • 有序性:能够按照顺序访问元素,适合需要排序的应用场景。
    • 范围查询:支持高效的范围查询操作。
  • 缺点
    • 性能开销:插入和删除操作的时间复杂度为 O(log⁡n),比哈希集稍慢。
    • 内存消耗:相对于哈希集,有序集合通常需要更多的内存来维护顺序。
4. 应用场景
  • 排序数据存储:需要保持元素有序的情况,如排行榜、优先队列。
  • 范围查询:如查找某一范围内的数值。
5. 示例代码(Java 实现有序集合)
import java.util.TreeSet;public class SortedSetExample {public static void main(String[] args) {TreeSet<Integer> sortedSet = new TreeSet<>();// 添加元素sortedSet.add(5);sortedSet.add(3);sortedSet.add(8);sortedSet.add(1);sortedSet.add(3); // 重复元素,不会被添加// 打印集合System.out.println("有序集合中的元素: " + sortedSet);// 范围查询System.out.println("小于 5 的元素: " + sortedSet.headSet(5));System.out.println("大于 3 的元素: " + sortedSet.tailSet(3));}
}

总结比较

集合类型特点操作复杂度应用场景
哈希集 (Hash Set)元素无序,不允许重复,快速查找和插入添加、删除、查找:O(1)去重、快速查找
有序集合 (Sorted Set)元素有序,不允许重复添加、删除、查找:O(log⁡n)排序存储、范围查询

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/3494.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

WonderWorld: Interactive 3D Scene Generation from a Single Image 论文解读

目录 一、概述 二、相关工作 1、新视图生成 2、单视图3D场景生成 3、视频生成 4、快速的3D场景表示 三、WonderWorld 1、FLAGS表示 2、引导深度扩散模块 3、单视角层次生成 4、基于几何的初始化 surfel表示 5、阶段一——生成3D场景部分 6、阶段二——用户交互控…

kkfileview4.2.1 LibreOffice_7.1.4_Linux_x86-64_rpm.tar.gz

问题 java.lang.IllegalStateException: officeHome doesnt exist or is not a directory: optlibreoffice7.1 安装 kkfileview4.2.1 LibreOffice_7.1.4_Linux_x86-64_rpm.tar.gz 测试 全过程脚本 [zengwenfenglocalhost Desktop]$ pwd /home/zengwenfeng/Desktop [zengwe…

可编辑71页PPT | 企业架构及典型设计方案

荐言分享&#xff1a;企业架构&#xff08;Enterprise Architecture, EA&#xff09;是战略与技术之间的桥梁&#xff0c;旨在确保企业的信息系统、业务流程、组织结构和技术基础设施能够协同工作&#xff0c;以支持企业的整体战略目标。它通过定义一套标准化的框架、原则、模型…

python代码获取zabbix上机器磁盘使用率

1.需要先给机器打上标记os_type: Linux或者os_type: Windows 2.代码请求获取数据&#xff1a; 先装一下相关的数据包 pip install pyzabbix from pyzabbix import ZabbixAPI import requests import urllib3 import concurrent.futuresclass ZabbixInfo():def __init__(self…

一个完整的crm系统都应该具备哪些功能?CRM系统功能盘点

前段时间我们去拜访一位企业老板&#xff0c;正好他们在开会&#xff0c;团队正在讨论如何与一位潜在的大客户达成交易。 客户对产品表现出浓厚的兴趣&#xff0c;也提出了一些具体的问题&#xff0c;例如上一次交易的详细信息、服务响应时间以及可能的折扣方案&#xff0c;但…

导师双选系统开发:Spring Boot技术详解

第一章 绪论 1.1 选题背景 如今的信息时代&#xff0c;对信息的共享性&#xff0c;信息的流通性有着较高要求&#xff0c;尽管身边每时每刻都在产生大量信息&#xff0c;这些信息也都会在短时间内得到处理&#xff0c;并迅速传播。因为很多时候&#xff0c;管理层决策需要大量信…

CTF顶级工具与资源

《Web安全》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484238&idx1&snca66551c31e37b8d726f151265fc9211&chksmc0e47a12f793f3049fefde6e9ebe9ec4e2c7626b8594511bd314783719c216bd9929962a71e6&scene21#wechat_redirect 《网安面试指南》h…

数列分块入门

本期是数列分块入门。其中的大部分题目来自hzwer在LOJ上提供的数列分块入门系列。 Blog:here (其实是对之前分块的 blog 的整理补充) sto hzwer orz %%% [转载] ---------------------------------------------------------------------------------…

模型自动绑骨,在线生成动画,神奇的网站《Mixamo》

英文名mixamo 网站地址&#xff1a;Mixamohttps://www.mixamo.com/#/首先进入需要注册&#xff0c;国内的手机号就可以&#xff0c;但是会有一些慢&#xff0c;多试几次 1、进入界面如下 2、载入自己的模型 2、绑定骨骼 拖动这几个有颜色的圈圈分别对应右图位置&#xff0c;点…

2024 CSS保姆级教程四

CSS中的动画 CSS动画&#xff08;CSS Animations&#xff09;是为层叠样式表建议的允许可扩展标记语言&#xff08;XML&#xff09;元素使用CSS的动画的模块​ 即指元素从一种样式逐渐过渡为另一种样式的过程​ 常见的动画效果有很多&#xff0c;如平移、旋转、缩放等等&#…

Docker安装anythingllm

拉镜像 docker pull mintplexlabs/anythingllm 启动 anythingllm docker run -d --name anythingllm --add-hosthost.docker.internal:host-gateway --env STORAGE_DIR/app/server/storage --health-cmd "/bin/bash/usr/local/bin/docker-healthcheck.sh || exit 1"…

格行:从新晋网红到国货之光,它究竟做对了什么?

作为一家迅速崛起的新消费品牌&#xff0c;近两年来&#xff0c;格行饱受质疑。 无论是商家还是消费者&#xff0c;都有人对其爱之恨之&#xff0c;喜欢它的人&#xff0c;认为它是正义的化身&#xff0c;价格的屠夫&#xff0c;国货的骄傲&#xff0c;原本需要花几百才能买到…

小菜家教平台(二):基于SpringBoot+Vue打造一站式学习管理系统

目录 前言 今日进度 详细过程 一、数据库重构 二、编写登录接口 相关知识点 前言 昨天我们重启了小菜家教平台的开发&#xff0c;创建了新项目并初步进行了配置&#xff0c;今天我们继续。大家要是有需要源码的话可以在评论区跟我说&#xff0c;博客中就不添加源码了~ 今…

数学期望和联合概率密度

数学期望的定义 数学期望是描述随机变量平均趋势的一个重要统计量。根据随机变量的类型&#xff08;离散或连续&#xff09;&#xff0c;数学期望的定义有所不同。 离散型随机变量的数学期望&#xff1a; 若离散型随机变量 X X X取值为 x 1 , x 2 , … , x n , … x_1,x_2,\do…

MRCTF2020:你传你ma呢

文件上传题先判断黑白名单过滤&#xff0c;先传个最简单的木马 这里上传不了php文件&#xff0c;猜测可能是对php文件进行了过滤&#xff0c;将文件改为任意后缀这里改为.abc 还是上传不成功&#xff0c;猜测可能对MIME也做了过滤&#xff0c;将Content-Type更改为image/jpeg再…

Harmony项目基础

项目基础 开发环境 DevEco Stuio下载和安装 DevEco Studio下载 下载链接:https://developer.huawei.com/consumer/cn/deveco-studio/ 安装IDE 直接运行安装文件即可 配置SDK及工具链 DevEco Studio 提供 SDK Manager 统一管理 SDK 及工具组件&#xff0c;包括如下组件包&…

《使用Gin框架构建分布式应用》阅读笔记:p307-p392

《用Gin框架构建分布式应用》学习第16天&#xff0c;p307-p392总结&#xff0c;总86页。 一、技术总结 1.AWS chapter 08讲使用AWS进行部署&#xff0c;可以根据需要选择是否阅读。因为使用到的概率很小&#xff0c;且还要绑卡&#xff0c;本人选择跳过。 2.CI/CD (1)什么…

新一代跟踪器StrongSORT: Make DeepSORT Great Again论文解析—让 DeepSORT 再次伟大

新一代跟踪器StrongSORT: Make DeepSORT Great Again论文解析—让 DeepSORT 再次伟大 时间&#xff1a;2023年 机构:北京邮电大学 发表在&#xff1a;IEEE TRANSACTIONS ON MULTIMEDIA, VOL. 25, 2023 代码源码地址&#xff1a; pytorch版本&#xff1a;https://github.com/dyh…

windows下安装jdk并配置环境

【1】安装jdk 这里建议傻瓜式安装&#xff0c;不要自定义路径&#xff0c;直接下一步下一步。 在Windows系统中安装JDK并设置环境变量&#xff08;包括JAVA_HOME和CLASSPATH&#xff09;是一个常见的任务。 1. 下载并安装JDK 访问Oracle官方网站或其他可信来源下载JDK安装包…

云安全真知实践 国内头部能源企业全面灵活云安全方案大公开

能源与安全&#xff0c;是两个紧密相连的齿轮&#xff0c;驱动着当今社会的运转与发展。能源是动力源泉&#xff0c;而安全则是守护这一动力的坚实支撑&#xff0c;保障着能源系统的运作与敏感数据的安全。 亚信安全一直以来为国内能源行业提供着安全保障&#xff0c;从石油、…