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

Java核心技术知识点笔记—集合框架

前言:Java最初版本只为最常用的数据结构提供了很少的一组类:Vector、Stack、Hashtable、BitSet和Enumeration接口。其中,Enumeration接口提供了一种用于访问任意容器中各个元素的抽象机制。与现代数据结构类库常见情况一样,Java集合类库将接口(interface)和实现(implementation)分离。

1、队列(Queue)接口:

1.1、规则:可以在队列末尾添加元素,在队列头部删除元素,查找队列中元素的个数。遵循“先进先出”的规则。

1.2、实现方式:使用循环数组(例如ArrayDeque),或者使用链表(例如LinkedList)。循环数组的效率比链表高,但是循环数组是一个有界集合,因此容量有限。如果程序需要的对象数量没有上限,最好考虑使用链表。

1.3、Abstract类的API:API文档中有一组名字以Abstract开头的类,是为类库实现者设计的,如有需要,扩展这些类比实现Queue接口中的所有方法方便得多。

2、Collection接口:Java类库中集合类的基本接口。

2.1、两个基本方法:Collection接口有很多方法,其中:

(1)add(E e)方法向集合添加元素。如果添加元素确实改变了集合则返回true,如果集合没有变化则返回false。

(2)iterator()方法返回一个实现了Iterator接口的迭代器对象,可以用来依次访问集合中的元素。

3、迭代器(Iterator):Iterator接口包含4个方法,其中:

(1)next()方法:通过反复调用,可以逐个访问集合中的元素。但如果达到集合的末尾,此方法会抛出NoSuchElementException。因此,需要先用hasNext()方法判断是否还有下一个元素。

(2)hasNext()方法:如果迭代器还有供访问的元素返回true,否则返回false。调用next()方法之前需先通过此方法判断。

        Collection<String> c = new ArrayList<>();Iterator<String> iterator = c.iterator();while (iterator.hasNext()){String s = iterator.next();System.out.print(s);}

(3)可以使用“for each”循环更加简练地表示同样的循环操作:

        Collection<String> c = new ArrayList<>();for (String str : c) {System.out.print(s);}

Java SE 8中,还可以使用 forEachRemaining方法并提供一个lambda表达式。

        Collection<String> c = new ArrayList<>();c.iterator().forEachRemaining(e->{System.out.print(e);});

(4)remove()方法:删除上一次调用next()方法时返回的元素。对next方法和remove方法的调用具有互相依赖性,如果调用remove之前没有调用next,将会抛出一个IllegalStateException。

(5)区别:Java集合类库的迭代器与其他类库的迭代器在概念上有所区别。传统集合类库,诸如C++标准模板库,迭代器是根据数组索引建模的,给定一个这样的迭代器就可查看指定位置上的元素,如同知道数组索引i就可以查看数组元素a[i]。而Java迭代器却是查找操作与位置变更紧密相连,查找元素的唯一方法是调用next方法,而迭代器会越过下一个元素,并返回越过的那个元素的引用。

(6)元素访问顺序:集合类型不同会影响元素访问的顺序。例如,ArrayList迭代器从索引0开始,每迭代一次索引值加1。而HashSet元素出现的顺序是随机的。

4、集合框架中的接口:集合有两个基本接口:Collection和Map

4.1、List接口:

(1)List是一个有序集合(ordered collection),元素会添加到容器中的特定位置。可以采用两种方式访问元素:迭代器访问,或者随机访问(random access,即使用一个整数索引来访问)。

(2)实际上,有两种有序集合,性能开销有很大差异。一种是由数组支持的有序集合,可以快速地随机访问,适合使用List方法并提供一个整数索引来访问;一种是链表,随机访问很慢,最后使用迭代器来遍历。

(3)集(set):集的add方法不允许增加重复的元素,要适当地定义集的equals方法:只要两个集包含同样的元素(不管元素顺序),就认为是相等的。hashCode方法的定义要保证包含相同元素的两个集会得到相同的散列码。

相关文章:

Java核心技术知识点笔记—集合框架

前言&#xff1a;Java最初版本只为最常用的数据结构提供了很少的一组类&#xff1a;Vector、Stack、Hashtable、BitSet和Enumeration接口。其中&#xff0c;Enumeration接口提供了一种用于访问任意容器中各个元素的抽象机制。与现代数据结构类库常见情况一样&#xff0c;Java集…...

Rsync数据同步工具

一、什么是Rsync Rsync是一款开源的&#xff0c;快速的&#xff0c;多功能的&#xff0c;可实现全量及增量&#xff08;差异化备份&#xff09;的本地或远程数据同步备份的优秀工具。 Rsync软件适用于Unix、Linux、Windows等多种操作系统。 &#xff08;1&#xff09;可使本地…...

redux小结

store.dispatch(action对象) 在 dispatch 中调用 action 方法返回 action 对象 // /actions/index.js /*** Action&#xff1a;* action本质上是一个 JS 对象&#xff1b;* 必须要包含 type 属性&#xff0c;否则会报错&#xff1b;* 只描述了有事情要发生&#xff0c…...

【Python】【进阶篇】十、Pygame的Font文本和字体

目录十、Pygame的Font文本和字体10.1 font.SysFont()10.2 font.Font()10.3 字体对象方法十、Pygame的Font文本和字体 Pygame 通过pygame.font模块来创建一个字体对象&#xff0c;从而实现绘制文本的目的。 该模块的常用方法如下所示&#xff1a; 名称说明pygame.font.init()初…...

【从零开始学习 UVM】10.8、UVM TLM —— UVM TLM Example

文章目录 subComp1subComp2ComponentAsubComp3ComponentBTop Env/Test这个 UVM TLM 示例使用之前文章中讨论的 put 端口、TLM FIFO 和 get 端口来构建一个具有不同层次的 TLM 端口的测试台。 下面定义了一个名为Packet的类,作为从一个组件传输到另一个组件的数据项。这个类对象…...

获取自己所上传资源的下载量

import requestsurl = https://download-console-api.csdn.net/v1/user/sources/getUploadListByUserName?status=2&pageNum=1&pageSize=100 cookie = # 这里填自己的cookie header = {"authority": "download-console-api.csdn.net","met…...

Aspose.cells模板导出使用记录

简述 用Aspose.cells导出可以方便地将数据到Excel文档中&#xff0c;简单的直接将DataTable列表写入即可&#xff0c;复杂的格式一般会先做好模板&#xff0c;再将数据填充进去&#xff0c;这样可以保持设置好的样式&#xff0c;又能快速填充内容&#xff0c;十分方便。 智能…...

AcWing——糖果传递

有 n个小朋友坐成一圈&#xff0c;每人有 a[i]个糖果。 每人只能给左右两人传递糖果。 每人每次传递一个糖果代价为 1。 求使所有人获得均等糖果的最小代价。 输入格式 第一行输入一个正整数 n&#xff0c;表示小朋友的个数。 接下来 n 行&#xff0c;每行一个整数 a[i]&…...

Redis中的单线程模型

文章目录 文件事件处理器模型Redis的客户端与服务端的交互过程图Redis基于Reactor模式开发了自己的网络事件处理器,称之为 文件事件处理器(File Event Hanlder)。 文件事件处理器由Socket、IO多路复用程序文件事件分派器(dispather)事件处理器(handler)文件事件处理器模型 IO…...

Python函数默认参数设置(超级详细)

我们知道&#xff0c;在调用函数时如果不指定某个参数&#xff0c;Python 解释器会抛出异常。为了解决这个问题&#xff0c;Python 允许为参数设置默认值&#xff0c;即在定义函数时&#xff0c;直接给形式参数指定一个默认值。这样的话&#xff0c;即便调用函数时没有给拥有默…...

人工智能如何赋能业务创新?安克创新有话要说

对于一家企业来说&#xff0c;应该如何运用人工智能技术助力业务创新&#xff1f;作为一家多年复合增长率超过35%的企业&#xff0c;安克创新对这个话题无疑有着深切的体验感悟。飞速成长的消费电子企业众所周知&#xff0c;当下各行各业都在如火如荼地开展人工智能应用&#x…...

如何学习与学习的本质

如何学习两种模式两种记忆方式拖延问题学习方法学习本质两种模式 专注模式发散模式 专注模式和发散模式可以进行切换&#xff0c;提高效率&#xff0c; 发散模式可以后台工作。 两种记忆方式 工作记忆&#xff08;前额叶皮质&#xff09;长时记忆&#xff08;图像比较容易记…...

C++ deque容器

C deque容器 文章目录C deque容器前言1. deque容器基本概念2. deque构造函数3. deque赋值操作4. deque大小操作5. deque 插入和删除6. deque 数据存取7. deque 排序总结前言 本文包含deque容器基本概念、deque构造函数、deque赋值操作、deque大小操作、deque插入和删除、deque…...

HashMap的底层原理

hashmap是一个以key,value形式存储的集合,在JDK1.7中是以数组链表的数据结构,在JDK1.8中是数组链表红黑树的数据结构,他在对数据操作时继承了数组的线性查找和链表的寻址修改 hashmap是线程不安全的 : 在JDK1.7中会造成环形链和数据丢失的情况 在JDK1.8中hashmap的put过程会造…...

Django 4.0文档学习(四)

上篇文章 Django 4.0文档学习&#xff08;四&#xff09; 文章目录编写你的第一个 Django 应用&#xff0c;第 6 部分自定义应用的界面和风格编写你的第一个 Django 应用&#xff0c;第 7 部分自定义后台表单自定义后台更改列表自定义后台界面和风格自定义后台主页编写你的第一…...

2023年全国最新高校辅导员精选真题及答案38

百分百题库提供高校辅导员考试试题、辅导员考试预测题、高校辅导员考试真题、辅导员证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 112.为改变重知识传授轻能力培养的大学课堂&#xff0c;教学方法可以采用&#xff08;&am…...

和ChatGPT-4聊完后,我觉得一切可能已经来不及了

了然无味&#xff0c;晴空万里&#xff01;和ChatGPT-4开始了一场坦诚的沟通&#xff0c;它全程都表现出高情商&#xff0c;以及不断尽量安抚我的情绪&#xff0c;而这&#xff0c;恰恰令我脊背发凉。 部分文字截取 ZM&#xff1a;我能不能理解每次对话就是一次你的“生命” G&…...

RocketMQ 5.1 NameServer 启动流程

文章目录1 解析命令行参数和配置文件2 创建并启动 NamesrvController2.1 创建 NamesrvController 对象2.2 启动 NamesrvController 对象第一步&#xff1a;初始化 controller第二步&#xff1a;注册 JVM 钩子第二步&#xff1a;启动 controllerRocketMQ是一个分布式消息中间件&…...

马云回国,首谈ChatGPT

马云今天回国了&#xff0c;这是一个备受关注的消息。 作为中国最具代表性的企业家之一&#xff0c;马云在过去的二十多年里&#xff0c;带领阿里巴巴从一个小小的创业公司&#xff0c;发展成为全球最大的电商平台之一&#xff0c;同时也推动了中国互联网行业的发展。 他的回…...

深入理解C++迭代器:让你的C++代码更加灵活

C迭代器&#xff1a;更加优雅的容器操作方式引言C迭代器简介a. 迭代器的定义b. 迭代器的作用c. 迭代器与指针的区别迭代器分类a. 输入迭代器&#xff08;Input Iterator&#xff09;b. 输出迭代器&#xff08;Output Iterator&#xff09;c. 前向迭代器&#xff08;Forward Ite…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...

【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验

Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...