java集合框架--集合接口

2023-10-26

java 集合框架使程序处理集合数组的方法标准化。集合框架包含了一组标准的接口。对这些接口,提供了几个标准的实现工具(LinkedList、HashSet 和 TreeSet);

集合接口:

接口 描述
Collection 集合框架的顶层接口,定义了操作对象集合的共同方法
List 继承 Collection,表示有序的,可包括重复元素的列表
Set 继承 Collection,表示无序的,无重复元素的列表
SortSet 继承 Set,对Set中元素进行排序
Queue 继承 Collection,定义了队列数据结构的操作方式
Deque 继承了Queue,定义了双向队列数据结构的操作方式

集合接口类图如下:

这里写图片描述

Collection 接口

Collection 接口是构造集合框架的基础。它声明所有类集合都将拥有的核心方法。因为所有类集合实现 Collection,所以熟悉它的方法对于清楚地理解框架是必要的。

注意:其中几个方法可能会引发一个 UnsupportedOperationException 异常,这些发生在当类集合不能被修改时。当一个对象与另一个对象不兼容,例如,当企图增加一个不兼容的对象到一个集合中时,将产生一个ClassCastException异常。

Collection 定义的方法:

方法 描述
boolean add (Object obj) 将 obj加入到调用类集合中。如果Obj被加入到类集合中了,则返回 true,如果未能加入集合,则返回 false。
booleand addAll(Collection c) 将 c 中的所有元素都加入到类集合中,如果操作成功,则返回 true, 否则返回 false。
void clear() 从调用类集合中删除所有元素
boolean contains(Object obj) 如果 obj 是调用类集合中的一个元素,则返回 true,否则返回 false。
boolean containsAll(Collection c) 如果调用类集合包含了 c 中的所有元素,则返回 true,否则返回 false。
boolean equals(Object obj) 如果调用类集合与 obj相等,则返回 true,否则返回 false
int hashCode() 返回调用类集合的散列值
boolean isEmpty() 如果调用类集合时空的,则返回true,否则返回 false。
Iterator iterator() 返回调用类集合的迭代器
boolean remove(Object obj) 从调用类集合中删除 obj 的一个实例。如果这个元素被删除了,则返回 true,否则返回 false
boolean removeAll(Collection c) 从调用类集合中删除 c 的的所有元素。如果类集合被改变了(也就是说元素被删除了),则返回 true,否则返回 false
boolean retainAll(Collection c) 删除调用类集合中除了包含在 c 中的元素之外的所有元素。如果类集合被改变了(也就是说元素被删除了),则返回 true,否则返回 false
int size() 返回调用类集合中元素的个数
Object[] toArray() 返回一个数组,该数组包含了所有存储在调用类集合中的元素
Object[] toArray(Object array[]) 返回一个数组,该数组仅仅包含了那些类型与数组元素类型匹配的类集合元素。如果 array的大小与匹配元素的个数相等,则它们被返回到 array,如果 array 的大小比匹配元素的个数小,则将分配并返回一个所需大小的新数组;如果 array 的大小比匹配元素的个数大,在数组中,在类集合元素之后的单元被置为 null。如果任 一类集合元素的类型都不是 array 的子类型,则引发一个 ArrayStoreException异常

List接口

List接口继承了 Collection 并声明了类集的新特性。使用一个基于 零 的下标,元素可以通过他们在列表中的位置被插入和访问。一个列表可以包含重复元素。

处理 由 Collection 定义的方法之外,List 还定义了一些它自己的方法。注意:当类集合不能被修改时,其中的几种方法引发 UnsupportOperationException 异常当一个对象与另一个对象不兼容,例如,当企图增加一个不兼容的对象到一个类集中时,将产生一个ClassCastException异常。

List 定义的方法:

方法 描述
void add(int index, Object obj) 将 obj 加入到调用列表中。插入位置的下标由 index 传递。任何已存在的,在插入点以及插入点之后的元素将后移。因此,没有元素被覆盖
booleand addAll(int index, Collection c) 将 c 中的所有元素插入到调用列表中。插入位置的下标由 index 传递。任何已存在的,在插入点以及插入点之后的元素将后移。因此,没有元素被覆盖。如果调用列表改变了,则返回 true, 否则返回 false。
Object get(int index) 返回存储在调用类集内指定下标处的对象
int indexOf(Object obj) 返回调用列表中 obj 的第一个实例的下标。如果 obj 不是列表中的元素,则返回 -1
int lastIndexOf(Object obj) 返回调用列表中 obj 的最后一个实例的下标。如果 obj 不是列表中的元素,则返回 -1
ListIterator listIterator() 返回调用列表的迭代器
ListIterator listIterator(int index) 返回调用列表从指定下标处开始的迭代器
Object remove(int index) 删除调用列表中 index 位置的元素并返回删除的元素。删除后,列表被压缩。也就是说,被删除元素后面的元素向前移动
Object set(int index, Object obj) 用 obj对调用列表内由 index 指定的位置进行赋值
List subList(int start, int end) 返回一个列表,该列表包括了调用列表中从 start 到 end - 1 的元素

Set 和 sortSet 接口
set 接口定义了一个集合,它继承了 collection 并说明了不允许重复元素的类集的特性。因此,如果试图将仇富元素加到集合时, add() 方法将返回 false,它本身并没有定义任何附件的方法。

SortSet 接口继承了 Set 并说明了按升序排列的集合的特性。当没有元素包含在调用集合中时,其中的几种方法引发 NoSuchElementException 异常。当对象与集合中的元素不兼容时,引发 ClassCastException 异常。如果试图使用 null 对象,而集合不允许 null 时,将引发 NullPointerException 异常。

SortedSet定义的方法:

方法 描述
Comparator comparator() 返回排序集合的比较器,如果对该集合使用自然排序,则返回 null
Object first() 返回排序集合的第一个元素
SortSet headSet(Object end) 返回一个包含那些小于 end 的元素的 SortedSet
Object last() 返回排序集合的最后一个元素
SortSet subSet(Object start, Object end) 返回一个 SortedSet,它包括了 从 start 到 end-1 的元素
SortSet tailSet(Object start) 返回一个 SortedSet, 它包含了那些包含在类集合中的大于 等于 start 的元素

Queue 和 Deque 接口

Queue< E >接口(E表示集合元素的类型)扩展了 Collection 接口、定义了一个队列数据结构的操作方式。队列定义了一个 “头” 位置, 它是下一个将要被移除的元素。除了从 Collection 继承的操作外,还提供了 插入,提取和检查操作。每个方法都存在两种形式。一种 抛出异常(操作失败时),另一种返回一个特殊值(null 或 false ,具体取决于操作)。插入操作的一种形式是用于专门为有容量限制的 Queue 实现设计的;在大多数实现中,插入操作不会失败。

Queue定义的方法:

方法 描述
boolean add(E e) 将指定的元素插入此队列(如果立即可行且不会违反容量限制),在成功时返回 true, 如果当前没有可用的空间,则抛出 IllegalStateException
boolean offer(E e) 将指定的元素插入此队列(如果立即可行且不会违反容量限制)当使用有容量显得队列时,此方法通常要优于 add(E),或者可能无法插入元素,而只是抛出一个异常
E remove() 获取并移除此队列的头,如果此队列为空,则抛出一个异常
E poll() 获取并移除此队列的头,如果此队列为空,则返回 null
E element() 获取,但是不移除此队列的头,此队列为空时,将抛出一个异常
E peek() 获取,但是不移除此队列的头,此队列为空时,则返回 null

remove() 和 poll() 方法可移除 和返回队列的头。到底从队列中移除哪个元素是队列排序策略的功能,而该策略在各种实现中是不同的。 remove() 和 poll() 方法仅在队列为空时其行为有所不同,remove() 方法抛出一个异常,而 poll () 方法则返回 null。

element () 和 peek() 返回但不移除队列的头。

Queue 接口并未定义阻塞队列的方法,而这种情况在并发编程中是很常见的。
BlockingQueue 接口定义了那些等待元素出现或等待队列中有可用空间的方法,这些方法扩展了此接口。

Queue 实现通常不允许插入null元素。尽管某些实现(如 LinkedList)并不禁止插入null.即使 在允许 null 的实现中,也不应该将 null 插入到 Queue 中。因为 null 也用做 poll 方法的一个特殊返回值,表明队列不包含元素。

Deque 定义了一个双端队列数据结构,支持在两端插入和移除元素。大多数Deque 实现对于他们能够包含的元素数有没固定的限制,但此接口即支持有容量限制的双端队列,也支持没有固定大小限制的双端队列。

此接口定义在双端队列两端访问元素的方法,提供插入,移除,和检查元素的方法。每种方法都存在两种形式:一种形式在操作失败时抛出异常,另一种形式返回一个特殊值 (null 或是 false,具体取决于操作)。插入操作的后一种形式是转为使用容量限制的Deque实现设计的;在大多数实现中,插入操作不能失败。

Deque 定义的方法

Tables Are Cool
col 3 is right-aligned $1600

此接口扩展了 Queue 接口。在将双端队列用作队列时,将得到 FIFO (现金先出)行为。
将原始添加到双端队列的末尾,从双端队列的开头移除元素。
从Queue 接口继承的方法完全等效于 Deque 方法。
双端队列也可用作 LIFO(后进先出)堆栈。应优先使用此接口而不是遗留 Stack l类。在将双端队列用作堆栈时,元素被推入双端队列的开头并从双端队列开头弹出。堆栈方法完全等效于Deque 方法。

虽然 Deque 实现没有严格要求禁止插入 null 元素,但 建议最好不要插入 null 元素。建议任何事实上允许 null 元素的 Deque 实现,用户最好不要利用插入 null 的功能。这是因为各种方法会将null用作特殊的返回值来指示双端队列为空

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java集合框架--集合接口 的相关文章

  • 如何在由子控件组成的 SWT 复合材料上跟踪鼠标?

    我创建了自己的控件 我想跟踪鼠标并添加一个MouseTrackListener 很遗憾MouseEnter and MouseLeave当鼠标移动到我的合成部分 即标签和按钮 上时 也会生成事件 Mouse enter mouse ente
  • 什么是抽象类? [复制]

    这个问题在这里已经有答案了 当我了解抽象类时 我说 WT H 问题 创建一个无法实例化的类有什么意义呢 为什么有人想要这样的课程 什么情况下需要抽象类 如果你明白我的意思 最常见的是用作基类或接口 某些语言有单独的interface构建 有
  • 从 MATLAB 调用 Java?

    我想要Matlab程序调用java文件 最好有一个例子 需要考虑三种情况 Java 内置库 也就是说 任何描述的here http docs oracle com javase 6 docs api 这些项目可以直接调用 例如 map ja
  • Mockito 使用 @Mock 时将 Null 值注入到 Spring bean 中?

    由于我是 Spring Test MVC 的新手 我不明白这个问题 我从以下代码中获取了http markchensblog blogspot in search label Spring http markchensblog blogsp
  • 如何检查某个元素是否存在于一组项目中?

    In an ifJava中的语句如何检查一个对象是否存在于一组项目中 例如 在这种情况下 我需要验证水果是苹果 橙子还是香蕉 if fruitname in APPLE ORANGES GRAPES Do something 这是一件非常微
  • Sun 在 EDT 之外做 GUI 工作的演示?

    我正在看SplashDemo java http download oracle com javase tutorial uiswing examples misc SplashDemoProject src misc SplashDemo
  • 如何在字段值无效的情况下更改 Struts2 验证错误消息?

    我在 Web 表单上使用 Struts2 验证 如果字段假设为整数或日期 则
  • 如何使用 JMagick 转换色彩空间?

    如何使用 JMagick API 转换色彩空间 例如 CMYK gt RGB 和 RGB gt CMYK None
  • 在Java中运行bat文件并等待

    您可能会认为从 Java 启动 bat 文件是一项简单的任务 但事实并非如此 我有一个 bat 文件 它对从文本文件读取的值循环执行一些 sql 命令 它或多或少是这样的 FOR F x in CD listOfThings txt do
  • Jetty、websocket、java.lang.RuntimeException:无法加载平台配置器

    我尝试在 Endpoint 中获取 http 会话 我遵循了这个建议https stackoverflow com a 17994303 https stackoverflow com a 17994303 这就是我这样做的原因 publi
  • 不可变的最终变量应该始终是静态的吗? [复制]

    这个问题在这里已经有答案了 在java中 如果一个变量是不可变的并且是final的 那么它应该是一个静态类变量吗 我问这个问题是因为每次类的实例使用它时创建一个新对象似乎很浪费 因为无论如何它总是相同的 Example 每次调用方法时都会创
  • 如何区分从 Saxon XPathSelector 返回的属性节点和元素节点

    给定 XML
  • Java Swing - 如何禁用 JPanel?

    我有一些JComponents on a JPanel我想在按下 开始 按钮时禁用所有这些组件 目前 我通过以下方式显式禁用所有组件 component1 setEnabled false 但是有什么办法可以一次性禁用所有组件吗 我尝试禁用
  • 将 JScrollPane 添加到 JFrame

    我有一个关于向 Java 框架添加组件的问题 我有一个带有两个按钮的 JPanel 和一个添加了 JTable 的 JScrollPane 我想将这两个添加到 JFrame 中 我可以将 JPanel 添加到 JFrame 或将 JScro
  • Hibernate 本机查询 - char(3) 列

    我在 Oracle 中有一个表 其中列 SC CUR CODE 是 CHAR 3 当我做 Query q2 em createNativeQuery select sc cur code sc amount from sector cost
  • java 中的蓝牙 (J2SE)

    我是蓝牙新手 这就是我想做的事情 我想获取连接到我的电脑上的蓝牙的设备信息并将该信息写入文件中 我应该使用哪个 api 以及如何实现 我遇到了 bluecove 但经过几次搜索 我发现 bluecove 不能在 64 位电脑上运行 我现在应
  • Java 正则表达式中的逻辑 AND

    是否可以在 Java Regex 中实现逻辑 AND 如果答案是肯定的 那么如何实现呢 正则表达式中的逻辑 AND 由一系列堆叠的先行断言组成 例如 foo bar glarch 将匹配包含所有三个 foo bar 和 glarch 的任何
  • 子类构造函数(JAVA)中的重写函数[重复]

    这个问题在这里已经有答案了 为什么在派生类构造函数中调用超类构造函数时 id 0 当创建子对象时 什么时候在堆中为该对象分配内存 在基类构造函数运行之后还是之前 class Parent int id 10 Parent meth void
  • 抛出 Java 异常时是否会生成堆栈跟踪?

    这是假设我们不调用 printstacktrace 方法 只是抛出和捕获 我们正在考虑这样做是为了解决一些性能瓶颈 不 堆栈跟踪是在构造异常对象时生成的 而不是在抛出异常对象时生成的 Throwable 构造函数调用 fillInStack
  • java'assert'和'if(){}else exit;'之间的区别

    java和java有什么区别assert and if else exit 我可以用吗if else exit代替assert 也许有点谷歌 您应该记住的主要事情是 if else 语句应该用于程序流程控制 而assert 关键字应该仅用于

随机推荐

  • 电路交换,报文交换和分组交换的原理、区别、优缺点

    电路交换 电路交换技术是在通信两端设备间 通过一个一个交换设备中线路的连接 实际建立了一条专用的物理线路 在该连接被拆除前 这两端的设备单独占用该线路进行数据传输 电话系统就是采用了线路交换技术 通过一个一个交换机中的输入线与输出线的物理连
  • word2003脚注问题

    问题分析 在题目上插入脚注的时候 脚注放在文件结尾 然后正文拆开了 不能续前节 解决办法 word2003中 工具 gt 选项 gt 兼容性
  • Java中的byte详解

    Java中的byte详解 介绍 byte 即字节 由8位的二进制组成 在Java中 byte类型的数据是8位带符号的二进制数 在计算机中 8位带符号二进制数的取值范围是 128 127 所以在Java中 byte类型的取值范围也是 128
  • OpenGL 红宝书 反走样 雾 点参数 多边形偏移

    6 2 反走样 void glHint GLenum target GLenum hint 控制OpenGL的某些行为 参数target是要控制的行为 参数hint可以是GL FASTEST GL NICEST GL DONT CARE 效
  • 组成原理---中断

    文章目录 中断的基本概念 中断请求与判优 中断响应 中断服务与返回 中断系统是计算机中实现中断功能的软 硬件总称 一般在 CPU 中配置中断机构 在外设接口中配置中断控制器 在软件上设计相应的中断初始化程序和中断服务程序 中断的基本概念 在
  • python从入门到精通 第一节 数据类型

    Python 中的变量不需要声明 每个变量在使用前都必须赋值 变量赋值以后该变量才会被创建 在 Python 中 变量就是变量 它没有类型 我们所说的 类型 是变量所指的内存中对象的类型 等号 用来给变量赋值 等号 运算符左边是一个变量名
  • 分布式锁的实现与应用

    为什么需要锁 在多任务环境下解决并发场景的数据竞争问题 Java常见锁 我们可以根据锁是否包含某一特性来进行分组归类 从线程是否对资源加锁 可以将锁分为乐观锁和悲观锁 从资源已被锁定时 线程是否阻塞 可以分为自旋锁 JUC下的atomic家
  • react实现计数器

    var In display gt div display div var Btn click gt
  • 同页面javascript中文参数传递

    修改前
  • VMware Workstation 14 Pro 安装 Windows Server 2003(完)

    一 下载镜像文件 Windows Server 2003有多种版本 每种都适合不同的商业需求 Windows Server 2003 Web Edition WindowsServer2003Web版 用于构建和存放Web应用程序 网页和X
  • Python入门的20个基础练习

    01 Hello World python的语法逻辑完全靠缩进 建议缩进4个空格 如果是顶级代码 那么必须顶格书写 哪怕只有一个空格也会有语法错误 下面示例中 满足if条件要输出两行内容 这两行内容必须都缩进 而且具有相同的缩进级别 pri
  • sqli - labs - Less 17

    我们先来看看源码 这里我们可以看到 首先进行上传数据的判断 但是 uname是通过上面的check input函数进行相关过滤所以用户名必须要正确 密码可以忽略 所以本关在密码这里找到突破口 可以看出在得到row变量之后 如果不为空 代码将
  • STM32跳至硬件错误中断(HardFault_Handle)

    1 遇到错误问题是数据类型不对 导致该步骤永远不能执行到 跳至硬件错误中断 所以硬件中断可尝试查找数据类型错误 2 堆栈设置错误也会跳至hardwarefault 3 如果上电后 在调试时 执行单步 会在不确定位置的地方产生HardFaul
  • 基于OpenCV的手势识别完整项目(Python3.7)

    这是我的本科毕设题目 刚开始接触机器学习这方面 感谢CSDN和GitHub上的大佬 网上类似项目很多 方法也有很多 自己顺带进行了整理 边做毕设边分享一下自己学习心得吧 也算是梳理一下所学知识 各大佬有什么好的建议还请指出 不吝赐教 项目简
  • Qt的槽函数崩溃问题

    当Qt的槽函数是一个lambda表达式时 如果传入的方法为引用传递 而你又在lambda表达式里使用了外面定义的stl或类 那么就会崩溃 这是因为Qt的槽函数是一个轮询的过程 第一次你进入这个表达式结束时会进行一次自动析构 第二次进入这个l
  • linux删除文件后没有释放空间

    系统 centos 7 现象 早上收到阿里云短信 发现一台服务器的磁盘空间使用率达到90 昨天晚上已经加了定时任务 难道没有啥用 无奈的我打开电脑 解决 由于已经解决 当时没有截图 查看磁盘空间 df h 找到对应文件 进行删除 rm fi
  • yaml文件的读写

    官方使用文档 https yaml cpp docsforge com 写入 include
  • addr2line命令

    在Linux下写C C 程序的程序员 时常与Core Dump相见 在内存越界访问 收到不能处理的信号 除零等错误出现时 我们精心或不精心写就的程序就直接一命呜呼了 Core Dump是Linux仁慈地留下的程序的尸体 帮助程序员们解决了一
  • Layout Object Tree 创建

    站在老罗的肩膀上 https blog csdn net luoshengyang article details 50615628 每一个HTML标签在DOM Tree中都有一个对应的HTMLElement节点 相应地 在DOM Tree
  • java集合框架--集合接口

    java 集合框架使程序处理集合数组的方法标准化 集合框架包含了一组标准的接口 对这些接口 提供了几个标准的实现工具 LinkedList HashSet 和 TreeSet 集合接口 接口 描述 Collection 集合框架的顶层接口