当前位置: 首页 > news >正文

常用集合(Set等)

Set

a.只需要存储不重复的key,不需要存储映射的value时,用Set集合。
b.存储Set不重复的元素集合,主要方法:
        i.将元素添加进Set:boolean add(E e);
        ii.将元素从Set删除:boolean remove(Object o);
        iii.判断是否包含元素:boolean contains(Object o);

c.Set实际上相当于只存储Key,不存储Value的Map。我们经常用Set去除重复元素。
d.因为放入Set的元素和Map的key类似,都要正确重写equals()和hashCode()方法,否则该元素无法正确放入Set。
e.最常用的Set实现类是HashSet,实际上,HashSet是对HashMap的一个简单封装。

f.Set接口并不保证有序,但是SortedSet接口是保证元素有序的。
        i.HashSet是无序的,因为它实现Set接口,不实现SortedSet接口。
        ii.TreeSet是有序的,因为它实现SortedSet接口。
g.使用TreeSet时,添加的元素必须正确实现Comparable接口,如果没有实现Comparable接口,那么创建TreeSet时必须传入一个Comparator对象。

Queue(队列:先进先出)

i.先进先出(FIFO:First In First Out)的有序表。
ii.和List的区别:List可以在任意位置添加删除元素,Queue只有两个操作:
        1.把元素添加到队列末尾。
        2.从列队头部取出元素。
iii.定义了几个方法

iv.注意:不要把null添加到队列中,否则poll()方法返回null时,很难确定是取到了null元素还是队列为空。
v.使用poll()和peek()的区别:poll()取完队首元素并删掉;peek()取完队首元素不删,可用于重复获取。

PriorityQueue(优先队列)

i.它的出队顺序与元素的优先级相关,对PriorityQueue调用remove()或poll()方法,返回的总是优先级最高的元素。
ii.PriorityQueue的优先级通过实现Comparable接口的排序实现,放入PriorityQueue的元素要么实现Comparable接口,要么在创建PriorityQueue对象时传入Comparator对象。

Deque(双端队列)

i.允许两头都进,两头都出,即双端队列(Double Ended Queue)。
ii.功能:
        1.既可以添加到队尾,也可以添加到队首;
        2.既可以从队首获取,也可以从队尾获取。

iii.注意:Deque接口实际上扩展了Queue。

Stack(栈:后进先出)

i.使用
        1.是一种后进先出(LIFO:Last In First Out)的数据结构。
        2.由于java中遗留类Stack的问题,没有单独的Stack接口,使用Deque来模拟Stack。
        3.只有入栈和出栈操作。
                a.把元素压栈:push(E);
                b.把栈顶元素弹出:pop();
                c.取栈顶元素但不弹出:peek()。
ii.作用
        1.JVM在处理Java方法调用的时候就会通过栈这种数据结构维护方法层次的调用。
        2.JVM会创建方法调用栈,每调用一个方法时,先将参数压栈,然后执行对应的方法;当方法返回时,返回值压栈,调用方法通过出栈操作获得方法返回值。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • CTF夺旗赛经验总结及落地实践,零基础入门到精通,收藏这一篇就够了
  • 跟着问题学12——GRU详解
  • 应用targetSdkVersion升级指导
  • 探索C语言与Linux编程:获取当前用户ID与进程ID
  • 中秋节特别游戏:给玉兔投喂月饼
  • Mac端口扫描工具
  • C++——打印以下图案:用字符数组方法。
  • golang学习笔记28——golang中实现多态与面向对象
  • 摄影社团管理系统
  • MySQL-DQL(数据查询语言)
  • Avalonia第三方UI库Semi.Avalonia用法详解
  • 数据库数据恢复—SQL Server附加数据库出现“错误823”怎么恢复数据?
  • 在Windows系统上安装的 zstd C++ 库
  • 面试知识点总结篇一
  • 【Android】模糊搜索与数据处理
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • Laravel 中的一个后期静态绑定
  • 聊聊flink的BlobWriter
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 山寨一个 Promise
  • 由插件封装引出的一丢丢思考
  • 云大使推广中的常见热门问题
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • ​​​​​​​STM32通过SPI硬件读写W25Q64
  • ​比特币大跌的 2 个原因
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • #每日一题合集#牛客JZ23-JZ33
  • (13):Silverlight 2 数据与通信之WebRequest
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (补)B+树一些思想
  • (二)斐波那契Fabonacci函数
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (回溯) LeetCode 77. 组合
  • (面试必看!)锁策略
  • (三)docker:Dockerfile构建容器运行jar包
  • (转)http协议
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • ... 是什么 ?... 有什么用处?
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .netcore如何运行环境安装到Linux服务器
  • .NET序列化 serializable,反序列化
  • .Net中间语言BeforeFieldInit
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • [2021 蓝帽杯] One Pointer PHP
  • [Android] Implementation vs API dependency
  • [Android]常见的数据传递方式
  • [Angular] 笔记 8:list/detail 页面以及@Input
  • [BUUCTF]-PWN:wustctf2020_number_game解析(补码,整数漏洞)
  • [Day 8] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
  • [Django ]Django 的数据库操作