Java集合详谈

本文深入解析Java集合框架,包括Collection接口及其子接口Set和List,Map接口,以及Iterator迭代器的使用。探讨了ArrayList、Vector、LinkedList、HashSet、LinkedHashSet、TreeSet等典型实现的特点与应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

集合是什么?

集合也称容器,是一个用来存放对象的容器,Java集合类存放于java.util包中。
Java集合框架主要分为两大部分,一部分Collection接口,该接口定义了存取一组对象的方法,其子接口Set和List分别定义了存取的方式;另一部是Map接口,该接口定义了存储一组key value键值对方法。
注意:
1:集合只能存放对象。如果一个int型数据1存入集合中,它会自动转换成integer类后存入的,Java的每一种基本类型都有对应的引用类型。
2:集合存放的是多个对象的引用,对象本身还是放在堆内存中。
3:集合可以存放不同类型,不限数量的数据类型。

一:Iterator

Iterator迭代器,他是Java集合的顶层接口(不包括map系列的集合,Map接口是map系列集合的顶层接口)
基本上所有的Java集合类除了map系列的集合,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,Java集合的顶层接口Collection继承的就是Iterable。
Iterator和Iterable的区别:
Iterable:存在与java.lang包中,里面封装了Iterator接口,只要实现了Iterable接口的类,就可以使用Iterator迭代器了。
Iterator:存在于java.util包中。核心的方法next(),hasnext(),remover().
Collection
Collection:List接口和Set接口的父接口

public interface Collection<E> extends Iterable<E> {

List
List:有序,可以重复的集合
1 List 接口的三个典型实现:

  • List list1 = new Arraylist();
    底层数据结构是数组,查询快,增删慢,线程不安全,效率高。

  • List list2 = new Vector();
    底层数据结构是数组,查询快,增删慢,线程安全,效率低几乎已经淘汰了。

  • List list3 = new LinkedList();
    底层数据结构是链表,查询慢,增删快,线程不安全,效率高。

List接口还可以使用for循环进行遍历,指定位置添加元素,替换元素等等。

Set
Set:典型实现HashSet()是一个无序,不可重复的集合。
1:Seto hashSet = new HashSet();
HashSet不能保证元素的顺序,不可重复,不是线程安全的,集合元素可为NULL;
其底层是一个数组,存在的意义是加速查询速度,在一般的数组中,元素在数组中的索引位置是随机的,元素的取值和元素的位置之间不存在确定的关系,而HashSet集合底层数组的索引和值有一个确定的关系,底层通过哈希算法实现,调用这个算法就能快速找到元素或索引。
对于HashSet,如果两个对象通过equals()方法返回true,这两个对象的hashCode值也应该相同。
当向HashSet集合中存入一个元素时,HashSet会先调用对象的hashCode()方法来得到该对象的hashCode值,然后根据hashCode值决定该对象在HashSet的存储位置。
如果hashCode值不同,直接把元素存储到hashCode()指定的位置。
如果hashCode值相同,继续判断该元素和集合对象的equals()比较
hashCode相同,equals为true,则视为同一个对象,不保存在hashCode()中。
hashCode相同,equals为false,则表示发生了冲突,这很麻烦,我们应该尽量避免这样的事情发生,即保证:如果两对象通过equals()方法返回true,则这两个对象的hashCode值也应该相同。
注意:每一个存储到哈希表中的对象,都将提供hashCode()和equals()方法的实现,用来判断是否是一个对象,
对于HashSet集合,我们要保证如果两个对象通过equals()方法返回true,这两个对象的hashCode值也应该相同

2:Set linkedHashSet = new LinkedHashSet();
不可以重复,有序
因为底层采用链表和哈希表的算法,链表保证元素的添加顺序,哈希表保证元素的唯一性
3:Set treeSet = new TreeSet();
TreeSet:有序,底层使用红黑树算法,擅长于范围查询。
如果使用TreeSet()无参数的构造器创建一个TreeSet对象,则要求放入其中的元素的类必须实现Comparable接口,所以在其中不能放入null元素
必须放入同样类的对象,(默认会进行排序)否则可能会发生类型转换异常,可以使用泛型来限制。
以上三个set接口的实现类的共同点:
1:都不允许元素重复
2:都不是线程安全的类,解决办法:Set set = Collections.synchronizedSet(set对象)

Map

Map:key-value的键值对,key不允许重复,value可以
因为Map集合既没有实现于Collection接口,也没有实现Iterable接口,所以不能对Map集合进行for-each遍历。

内容概要:该论文聚焦于T2WI核磁共振图像超分辨率问题,提出了一种利用T1WI模态作为辅助信息的跨模态解决方案。其主要贡献包括:提出基于高频信息约束的网络框架,通过主干特征提取分支和高频结构先验建模分支结合Transformer模块和注意力机制有效重建高频细节;设计渐进式特征匹配融合框架,采用多阶段相似特征匹配算法提高匹配鲁棒性;引入模型量化技术降低推理资源需求。实验结果表明,该方法不仅提高了超分辨率性能,还保持了图像质量。 适合人群:从事医学图像处理、计算机视觉领域的研究人员和工程师,尤其是对核磁共振图像超分辨率感兴趣的学者和技术开发者。 使用场景及目标:①适用于需要提升T2WI核磁共振图像分辨率的应用场景;②目标是通过跨模态信息融合提高图像质量,解决传统单模态方法难以克服的高频细节丢失问题;③为临床诊断提供更高质量的影像资料,帮助医生更准确地识别病灶。 其他说明:论文不仅提供了详细的网络架构设计与实现代码,还深入探讨了跨模态噪声的本质、高频信息约束的实现方式以及渐进式特征匹配的具体过程。此外,作者还对模型进行了量化处理,使得该方法可以在资源受限环境下高效运行。阅读时应重点关注论文中提到的技术创新点及其背后的原理,理解如何通过跨模态信息融合提升图像重建效果。
### PLC的详细解析 #### 工作原理 可编程逻辑控制器(PLC)是一种专为工业环境设计的数字计算机,用于自动化控制。其核心工作原理基于循环扫描的方式执行用户程序。在每次扫描周期中,PLC会完成输入采样、程序执行和输出刷新三个阶段[^1]。 - **输入采样**:PLC读取所有输入信号的状态,并将这些状态存储到输入映像寄存器中。 - **程序执行**:根据输入映像寄存器中的数据,按照用户编写的程序进行逻辑运算或算术运算。 - **输出刷新**:将程序执行的结果写入输出锁存器,从而改变外部设备的状态。 这种循环扫描机制确保了PLC能够实时响应外部事件并作出相应的控制动作。 #### 应用场景 PLC广泛应用于各种工业自动化领域,包括但不限于: - **制造业**:如汽车装配线、食品加工生产线等,用于控制机械臂、传送带以及其他生产机械。 - **过程控制**:在化工、石油精炼等行业中,用来监控和调节温度、压力、流量等参数。 - **楼宇自动化**:用于暖通空调系统(HVAC)、电梯控制系统以及安全系统等。 - **能源管理**:在电力分配系统中实现负载平衡和故障检测等功能。 #### 编程方法 PLC的编程通常采用几种标准化语言,最常见的是梯形图(Ladder Diagram, LD)、功能块图(Function Block Diagram, FBD)、结构化文本(Structured Text, ST)和指令列表(Instruction List, IL)。每种语言都有其特点和适用场合。 - **梯形图**是最直观的一种图形化编程语言,它模仿继电器逻辑电路的设计方式,易于理解和学习。 - **功能块图**允许开发者使用预定义的功能块来构建复杂的控制逻辑,支持模块化设计。 - **结构化文本**是一种高级文本编程语言,适合处理复杂的数据操作和算法实现。 - **指令列表**类似于汇编语言,提供了对硬件直接访问的能力,但相对难以编写和维护。 下面是一个简单的梯形图示例,展示了如何通过两个按钮控制一个指示灯: ```plaintext |----[ ]----( )--| I0.0 Q0.0 |----[ ]----( )--| I0.1 Q0.0 ``` 在这个例子中,如果任一按钮(I0.0 或 I0.1)被按下,则指示灯(Q0.0)会被点亮。 此外,现代PLC还支持更复杂的编程技术,比如面向对象的方法,其中可以创建可重用的功能块(FBs),例如`FB_RobotCtrl`、`FB_Vision` 和 `FB_Safety`,它们分别用于机器人控制、视觉通信处理和安全联锁逻辑。全局数据块(如`DATA_DB.gxw`)则用来保存配方信息和运行时参数,使得不同功能块之间能够共享数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值