Java集合类的学习(一)

【论文+代码】ZS-N2N实现小样本零网络图像去噪 本文涵盖论文原文讲解与代码复现。 阅读详情

(需要PDF文档可以去这里下载:http://download.youkuaiyun.com/detail/my_session/4555903)

1         集合框架

1.1         集合框架概述

1.1.1         容器简介

到目前为止,我们已经学习了如何创建多个不同的对象,定义了这些对象以后,我们就可以利用它们来做一些有意义的事情。

举例来说,假设要存储许多雇员,不同的雇员的区别仅在于雇员的身份证号。我们可以通过身份证号来顺序存储每个雇员,但是在内存中实现呢?是不是要准备足够的内存来存储1000个雇员,然后再将这些雇员逐一插入?如果已经插入了500条记录,这时需要插入一个身份证号较低的新雇员,该怎么办呢?是在内存中将500条记录全部下移后,再从开头插入新的记录? 还是创建一个映射来记住每个对象的位置?当决定如何存储对象的集合时,必须考虑如下问题。

对于对象集合,必须执行的操作主要以下三种:

u       添加新的对象

u       删除对象

u       查找对象

我们必须确定如何将新的对象添加到集合中。可以将对象添加到集合的末尾、开头或者中间的某个逻辑位置。

从集合中删除一个对象后,对象集合中现有对象会有什么影响呢?可能必须将内存移来移去,或者就在现有对象所驻留的内存位置下一个“洞”。

在内存中建立对象集合后,必须确定如何定位特定对象。可建立一种机制,利用该机制可根据某些搜索条件(例如身份证号)直接定位到目标对象;否则,便需要遍历集合中的每个对象,直到找到要查找的对象为止。

前面大家已经学习过了数组。数组的作用是可以存取一组数据。但是它却存在一些缺点,使得无法使用它来比较方便快捷的完成上述应用场景的要求。

1.         首先,在很多数情况下面,我们需要能够存储一组数据的容器,这一点虽然数组可以实现,但是如果我们需要存储的数据的个数多少并不确定。比如说:我们需要在容器里面存储某个应用系统的当前的所有的在线用户信息,而当前的在线用户信息是时刻都可能在变化的。 也就是说,我们需要一种存储数据的容器,它能够自动的改变这个容器的所能存放的数据数量的大小。这一点上,如果使用数组来存储的话,就显得十分的笨拙。

2.         我们再假设这样一种场景:假定一个购物网站,经过一段时间的运行,我们已经存储了一系列的购物清单了,购物清单中有商品信息。如果我们想要知道这段时间里面有多少种商品被销售出去了。那么我们就需要一个容器能够自动的过滤掉购物清单中的关于商品的重复信息。如果使用数组,这也是很难实现的。

3.         最后再想想,我们经常会遇到这种情况,我知道某个人的帐号名称,希望能够进一步了解这个人的其他的一些信息。也就是说,我们在一个地方存放一些用户信息,我们希望能够通过用户的帐号来查找到对应的该用户的其他的一些信息。再举个查字典例子:假设我们希望使用一个容器来存放单词以及对于这个单词的解释,而当我们想要查找某个单词的意思的时候,能够根据提供的单词在这个容器中找到对应的单词的解释。如果使用数组来实现的话,就更加的困难了。

为解决这些问题,Java里面就设计了容器集合,不同的容器集合以不同的格式保存对象。

数学背景

在常见用法中,集合(collection)和数学上直观的集(set)的概念是相同的。集是一个唯一项组,也就是说组中没有重复项。实际上,“集合框架”包含了一个 Set 接口和许多具体的 Set 类。但正式的集概念却比 Java 技术提前了一个世纪,那时英国数学家 George Boole 按逻辑正式的定义了集的概念。大部分人在小学时通过我们熟悉的维恩图引入的“集的交”和“集的并”学到过一些集的理论。

集的基本属性如下:

u       集内只包含每项的一个实例 

u       集可以是有限的,也可以是无限的 

u       可以定义抽象概念 

集不仅是逻辑学、数学和计算机科学的基础,对于商业和系统的日常应用来说,它也很实用。“连接池”这一概念就是数据库服务器的一个开放连接集。Web 服务器必须管理客户机和连接集。文件描述符提供了操作系统中另一个集的示例。

映射是一种特别的集。它是一种对(pair)集,每个对表示一个元素到另一元素的单向映射。一些映射示例有:

u       IP 地址到域名(DNS)的映射 

u       关键字到数据库记录的映射 

u       字典(词到含义的映射) 

u       2 进制到 10 进制转换的映射 

就像集一样,映射背后的思想比 Java 编程语言早的多,甚至比计算机科学还早。而Java中的Map 就是映射的一种表现形式。

1.1.2        容器的分类

既然您已经具备了一些集的理论,您应该能够更轻松的理解“集合框架”。 “集合框架”由一组用来操作对象的接口组成。不同接口描述不同类型的组。在很大程度上,一旦您理解了接口,您就理解了框架。虽然您总要创建接口特定的实现,但访问实际集合的方法应该限制在接口方法的使用上;因此,允许您更改基本的数据结构而不必改变其它代码。框架接口层次结构如下图所示。

 

Java容器类类库的用途是“保存对象”,并将其划分为两个不同的概念:

1)  Collection 。 一组对立的元素,通常这些元素都服从某种规则。List必须保持元素特定的顺序,而Set 不能有重复元素。

2)  Map 。 一组 成对的“键值对”对象。初看起来这似乎应该是一个Collection ,其元素是成对的对象,但是这样的设计实现起来太笨拙了,于是我们将Map明确的提取出来形成一个独立的概念。另一方面,如果使用Collection 表示Map的部分内容,会便于查看此部分内容。因此Map一样容易扩展成多维Map ,无需增加新的概念,只要让Map中的键值对的每个“值”也是一个Map即可。

Collection和Map的区别在于容器中每个位置保存的元素个数。Collection 每个位置只能保存一个元素(对象)。此类容器包括:List ,它以特定的顺序保存一组元素;Set 则是元素不能重复。

Map保存的是“键值对”,就像一个小型数据库。我们可以通过“键”找到该键对应的“值”。

u     Collection – 对象之间没有指定的顺序,允许重复元素。

u     Set –  对象之间没有指定的顺序,不允许重复元素

u     List–  对象之间有指定的顺序,允许重复元素,并引入位置下标。 

u     Map –  接口用于保存关键字(Key)和数值(Value)的集合,集合中的每个对象加入时都提供数值和关键字。Map 接口既不继承 Set 也不继承 Collection。 

List、Set、Map共同的实现基础是Object数组

除了四个历史集合类外,Java 2 框架还引入了六个集合实现,如下表所示。

接口

实现

历史集合类

Set 

HashSet 

 

 

TreeSet 

 

List 

ArrayList 

Vector 

 

LinkedList 

Stack 

Map 

HashMap 

Hashtable 

 

TreeMap 

Properties 

 

这里没有 Collection 接口的实现,接下来我们再来看一下下面的这张关于集合框架的大图:

这张图看起来有点吓人,熟悉之后就会发现其实只有三种容器:Map,List和Set ,它们各自有两个三个实现版本。常用的容器用黑色粗线框表示。

点线方框代表“接口”,虚线方框代表抽象类,而实线方框代表普通类(即具体类,而非抽象类)。虚线箭头指出一个特定的类实现了一个接口(在抽象类的情况下,则是“部分”实现了那个接口)。实线箭头指出一个类可生成箭头指向的那个类的对象。例如任何集合( Collection )都能产生一个迭代器( Iterator ),而一个List 除了能生成一个ListIterator (列表迭代器)外,还能生成一个普通迭代器,因为List 正是从集合继承来的.

使用STARTER V5.6软件将项目文件下载到S120驱动器控制单元CF卡中的具体方法演示 阅读详情

相关推荐

股票行情接口,最全的接入方法

股票行情接口一般有两种,一种是WebSocket,一种是http,通过WebSocket可以获取逐笔的股票tick数据,实时并且高效;通过http接口可以获取股票行情接口中的股票历史数据;WebSocket是一种高效的双向通信协议,它允许数据的实时推送,避免了不断的轮询请求。其次,WebSocket允许您订阅特定的数据源或股票数据产品,只接收您感兴趣的信息,提高了数据的效率和可用性。通过接入股票行情数据的HTTP接口,您可以将数据导入到自己的分析工具或系统中,进行更深入的数据分析、模型构建和决策支持。

apifinance的博客 3425

学习Java之 Java的集合类

学习Java之 Java的集合类 我们要求能在任何时候,创建任意数量的对象,而这些对象用什么来容纳呢?我们首先想到了数组,但是数组只能放统一类型的数据,而且其长度是固定的,那怎么办?集合就产生了。 Java集合类是一种特别有用的工具类,可用于存储数量不等的对象,并可以实现常用的数据结构,如栈、队列等。。Java集合大致可分为List、Set、Queue和Map四种体系,下面详解。 List集合: ...

正在编辑中....的博客 253

不用买VR设备!用UE5内置模拟器开发虚拟现实项目的完整教程

本文提供了一套无需购买昂贵VR硬件的虚拟现实开发最佳实践方案。详细介绍了如何利用虚幻引擎5内置的XR模拟器,从零开始配置开发环境、模拟操作、构建场景并实现核心交互逻辑。通过这套纯软件方案,开发者可以高效学习VR开发核心,大幅降低入门门槛和成本。

weixin_29019241的博客 621

java的集合学习

笔记来源毕向东视频 1.集合类的由来 2.集合的特点 3.集合框架图 4.Collection的共性方法 5.迭代器的使用 6.有序重复同步问题 7.List 7.1特有常见方法 7.2list取出元素方法 7.3ListIterator介绍 8.LinkedList 9.ArrayList 10.哈希表确定元素是否相同 11.集合框架Collection练习 11.1定义功...

老鬼的博客 4575

OpenMontage:AI代理驱动的端到端视频生产系统实战指南

在当今内容创作领域,自动化视频生成技术正成为提升生产效率的关键。其核心原理在于通过智能体(Agent)架构,将复杂的视频制作流程拆解为可被AI理解和执行的标准化任务,从而实现从创意到成片的端到端自动化。这项技术的核心价值在于大幅降低了专业视频制作的门槛,使非专业用户也能快速产出具有一定专业度的内容。其典型应用场景包括社交媒体短片、产品演示、知识科普视频的批量生产。OpenMontage正是这一技术理念的杰出实践,它构建了一个完整的代理驱动视频生产系统,将AI编码助手转变为能自主规划并执行脚本撰写、素材检索、

weixin_35757191的博客 649

MT9V034摄像头学习笔记(一)_mt9v034摄像头循迹代码(1)

函数名称:uint8_t SCB_RegRead(uint8_t Device,uint8_t Address,uint16_t *Data)* 函数名称:uint8_t SCB_RegWrite(uint8 Device,uint8 Address,uint16 Data)* 函数名称:uint8 SCCB_SendByte(uint8 Data)* 函数名称:uint8 SCCB_ReadByte(void)* 修改时间:2018年3月4日。* 修改时间:2018年3月4日。

2401_87555661的博客 908

Java集合详解2:ArrayList、Vector、Stack

Java 8 容器源码-ArrayList – 有图 Java 8 容器源码-ArrayList – 更详细 Java8源码-详解fail-fast ArrayList、Vector、Stack ArrayList、Vector、Stack 同上 防挂 思维导图 ArrayList、Vector、Stack思维导图 面试题 一篇文章搞定ArrayList和LinkedList所有面试问题 ...

c22cxz的博客 227

全局注意机制 GAM | Global Attention Mechanism: Retain Information to Enhance Channel-Spatial Interactions

全局注意机制 GAM

Coding... 2577

Java类源码_java集合类源码学习一

对于java的集合类,首先看张图这张图大致描绘出了java集合类的总览,两个体系,一个Collection集合体系一个Map集合体系。在说集合类之前,先说说Iterable这个接口,这个接口在jdk1.8之前,里面只有一个方法Iterator iterator(),即返回一个T类型的迭代器,在1.8增加了两个default修饰的方法default void forEach(Consumer sup...

weixin_29944865的博客 189

YOLO26改进策略【Neck】| ICCV2025 反向卷积 Converse2D 数学逆运算提重构 + 特征域建模降伪影,提升多尺度目标检测精度

本文记录的是利用Converse2D 算子改进 YOLO26 的上采样。(Converse 2D Convolution)通过正则化最小二乘闭式解与深度化空间建模结合,实现YOLO26特征提取与上采样阶段的卷积逆运算及特征精准重构。本文利用算子,通过闭式解的非迭代计算还原卷积下采样后的原始特征,再通过可学习核与自适应正则化参数稳定逆问题求解,同时依托圆形填充与插值初始估计保留特征高频细节,对YOLO26中不同尺度检测目标的特征进行针对性重构强化、抑制卷积/转置卷积带来的伪影与信息损失干扰,在特征融合与上采样

Limiiiing的博客 655

基于Vivado MIG IP核的DDR3读写实验(top_rom_ddr/ddr_top)

一、前言 关于Vivado MIG IP核详细配置可以参考我之前的文章:基于Vivado MIG IP核的DDR3控制器(DDR3_CONTROL) 关于MIG IP核的用户端的接口时序可以参考这篇文章:XILINX 的 MIG IP(非AXI4)接口时序以及控制 二、实验内容 本次实验的内容主要是通过MIG IP核向DDR3读写数据,DDR3的接口时序由ddr_top模块提供: ddr_top模块的数据来源是wr_fifo,wr_fifo的数据实际来自top_sd_photo模块(本实验仿真

耐心的小黑的博客 3027

java集合类源码学习一

 对于java的集合类,首先看张图 这张图大致描绘出了java集合类的总览,两个体系,一个Collection集合体系一个Map集合体系。在说集合类之前,先说说Iterable这个接口,这个接口在jdk1.8之前,里面只有一个方法Iterator<T> iterator(),即返回一个T类型的迭代器,在1.8增加了两个default修饰的方法 default void...

weixin_30840573的博客 140

模型预测控制(MPC)算法介绍

模型预测控制(Model Predictive Control,MPC)是一种先进的控制策略,广泛应用于工业过程控制、机器人控制、电力系统等领域。它基于系统的模型,通过滚动优化来预测系统未来的行为,并据此确定当前的最优控制输入。

AI的内部世界的博客 7174

JAVA学习记录(一)————JAVA中的集合类

JAVA学习记录(一)————JAVA中的集合类 这个图是总体的框架图,主要是两个接口Collection和Map都继承接口Iterator(Iterable),为了实现可以使用迭代器。Collection和Map类似平级关系。 1、这里我先学习下ArrayList和LinkedList: ArrayList先从源码的注释看起,讲述Ar...

weixin_34292959的博客 93

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

java 集合类学习一

遍历list Collection c= new ArrayList(Arrays.asList(1,2,3,4,5)); Iterator it = c.iterator(); while(it.hasNext()){ System.out.println(it.next()); } out:1 2 3 4 5 文氏图移除 Set set1 = new HashSet(

dashuxiaoai的专栏 515

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

java集合类的学习总结一

概况总结 首先,区分最顶层接口的区别:Collection和Map的区别:前者是单个元素;后者存储的是一对元素。Collection有List和Set两个子接口,两个子接口下分别有Vector和ArrayList以及HashSet和TreeSet等实现类;Map有HashMap、TreeMap、HashTable三种实现类。现分别总结它们的区别。 一、在Collection下面,有Set和Li...

weixin_33733810的博客 165

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Java集合类学习(一) 引言

集合类中,它的所有元素都被看做Object的实例,这样虽然方便但有潜在问题。如多个类型不同的元素放在同一个集合里,会增加访问时类型转换的困难,甚至产生错误。因此,我们通常**使用泛型来约束**集合里元素的类型。

A20212的博客 274

Java中集合类学习笔记一---Vector

一、学习背景 二、

TerryLMay 1042

Java集合类学习--TreeMap(一)

概述 TreeMap使用红黑树存储元素,可以保证元素按key值的大小进行遍历。 TreeMap 类的继承结构如下: 可以看出: public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, java.io.Serializable TreeMap实现了Map、SortedMap、NavigableMap、Cloneable、Ser

CodersCoder的博客 414

java学习之旅(一)java基础知识(3)集合类

常用集合类的使用 如果涉及到堆栈、队列等操作,应当考虑List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList 哈希表的操作,作为Key的对象要正确复写equals和hashCode方法 尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果将来要将ArrayList换成LinkedList时,客户端代码不用改...

qq_33861191的博客 204

Java学习【阶段一[06]】集合(01集合类)

一、集合概述 ArrayList<E>是我们前面学过的一个集合 集合:集合是java中提供的一个容器,可以用来存储多个数据 集合与数组的区别 数组长度固定,集合长度可变 数组中存储的是同一类型的元素,可以存储基本数据类型值也可以存储对象。集合存储的都是对象不能存储基本数据类型,而且对象的类型可以不一致。在开发中一般当对象多的时候,使用集合进行存储 int [ ]arr=new...

qq_41915980的博客 234

【学习笔记】java集合类(一)

1、基本概念 Java集合类存放在java.util包中,是一个用来存放对象的容器。 –集合只能存放对象,如存放一个int数据放入集合中,会自动转换成Integer类存入,Java中每一种基本类型都有对应的引用类型; – 集合存放的是多个对象的引用,对象本身还是放在堆内存中; – 集合可以存放不同类型,不限数量的数据类型。 2、集合工具的分析 Java集合是Java提供的工具包,常用的数据结构...

wandjj的博客 154

Java集合类学习--HashMap(一)

概述 HashMap采用key/value存储结构,每个key对应唯一的value,查询和修改的速度都很快,能达到O(1)的平均时间复杂度。它是非线程安全的,且不保证元素存储的顺序。 HashMap 是 Java 开发中最常用的容器类之一,也是面试的常客。JDK1.7之前是数组 + 链表 。在 JDK 1.8 做了优化,当链表长度达到一定数量时会把链表转为红黑树。 因此,JDK 1.8 中的 HashMap 实现可以理解为「数组 + 链表 + 红黑树」。内部结构示意图: HashMap 的继承结构和类签名

CodersCoder的博客 287

Java安全集合类

《Java并发编程 从入门到精通》读书笔记。 Java集合类非常方便,但适用于现成安全场景下的集合类平常使用的比较少一点,主要是ConcurrentHashMap。

探索技术世界 1362

Java集合类及常用数据结构

下面这个图示为JAVA的集合类关系图,没用用严格的UML,了解其中的关系即可,其中颜色强调的几个类为常用的集合类。

一串代码的博客 918

一文搞定Java集合类,你还在为Java集合类而烦恼吗?

常用集合类

轻松玩编程 1189
上一篇: Struts2请求处理流程及源码分析
下一篇: Java集合类的学习(二)——Collection接口和Iterator迭代器
Jmark_GC
博客等级 码龄14年 32粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值