ArrayList

第4章 数组和集合 一.选择题 1.在C#中定义一个数组,以下正确的是【 B 】。 A) int a=new int[5]; B) int[] a= new int[5]; C) int a=new int[]; D) int[5] a=new int[]; 2.下列语句中,不能正确定义长度为4的数组a的语句是【 C】。 A) int[] a=new int[]{1,2,3,4... 阅读详情

一 特点:

1,大小是可变的,是自动增长的,可以动态得增加或是修改

2,实现了ICollecion和IList接口

3,它是非同步的集合类

4,元素是可以重复的


二 如何使用ArrayList

  最简单的例子:
ArrayList List = new ArrayList();
for( int i=0;i<10;i++ ) //给数组增加10个Int元素
List.Add(i); 
//..程序做一些处理
List.RemoveAt(5);//将第6个元素移除
for( int i=0;i<3;i++ ) //再增加3个元素
  List.Add(i+20);
Int32[] values = (Int32[])List.ToArray(typeof(Int32));//返回ArrayList包含的数组


三  ArrayList重要的方法和属性
(1)构造器
    ArrayList提供了三个构造器:
public ArrayList();
默认的构造器,将会以默认(16)的大小来初始化内部的数组
public ArrayList(ICollection);
用一个ICollection对象来构造,并将该集合的元素添加到ArrayList
public ArrayList(int);
用指定的大小来初始化内部的数组

(2)IsSynchronized属性和ArrayList.Synchronized方法
    IsSynchronized属性指示当前的ArrayList实例是否支持线程同步,而ArrayList.Synchronized静态方法则会返回一个ArrayList的线程同步的封装。
    如果使用非线程同步的实例,那么在多线程访问的时候,需要自己手动调用lock来保持线程同步,例如:
ArrayList list = new ArrayList();
//...
lock( list.SyncRoot ) //当ArrayList为非线程包装的时候,SyncRoot属性其实就是它自己,但是为了满足ICollection的SyncRoot定义,这里还是使用SyncRoot来保持源代码的规范性
{
list.Add( “Add a Item” );
}

     如果使用ArrayList.Synchronized方法返回的实例,那么就不用考虑线程同步的问题,这个实例本身就是线程安全的,实际上ArrayList内部实现了一个保证线程同步的内部类,ArrayList.Synchronized返回的就是这个类的实例,它里面的每个属性都是用了lock关键字来保证线程同步。

****

但是,使用这个方法(ArrayList.Synchronized)并不能保证枚举的同步,例如,一个线程正在删除或添加集合项,而另一个线程同时进行枚举,这时枚举将会抛出异常。所以,在枚举的时候,你必须明确使用 SyncRoot锁定这个集合。

 

Hashtable与ArrayList关于线程安全性的使用方法类似。

****

(3)Count属性和Capacity属性
    Count属性是目前ArrayList包含的元素的数量,这个属性是只读的。
Capacity属性是目前ArrayList能够包含的最大数量,可以手动的设置这个属性,但是当设置为小于Count值的时候会引发一个异常。

(4)Add、AddRange、Remove、RemoveAt、RemoveRange、Insert、InsertRange
    这几个方法比较类似
Add方法用于添加一个元素到当前列表的末尾
AddRange方法用于添加一批元素到当前列表的末尾
Remove方法用于删除一个元素,通过元素本身的引用来删除
RemoveAt方法用于删除一个元素,通过索引值来删除
RemoveRange用于删除一批元素,通过指定开始的索引和删除的数量来删除
Insert用于添加一个元素到指定位置,列表后面的元素依次往后移动
InsertRange用于从指定位置开始添加一批元素,列表后面的元素依次往后移动

    另外,还有几个类似的方法:
Clear方法用于清除现有所有的元素
Contains方法用来查找某个对象在不在列表之中

    其他的我就不一一累赘了,大家可以查看MSDN,上面讲的更仔细
(5)TrimSize方法
    这个方法用于将ArrayList固定到实际元素的大小,当动态数组元素确定不在添加的时候,可以调用这个方法来释放空余的内存。
(6)ToArray方法
    这个方法把ArrayList的元素Copy到一个新的数组中。



四 ArrayList与数组转换
    例1:
ArrayList List = new ArrayList();
List.Add(1);
List.Add(2);
List.Add(3);

Int32[] values = (Int32[])List.ToArray(typeof(Int32));

    例2:
ArrayList List = new ArrayList();
List.Add(1);
List.Add(2);
List.Add(3);

Int32[] values = new Int32[List.Count];
List.CopyTo(values);

    上面介绍了两种从ArrayList转换到数组的方法

    例3:
ArrayList List = new ArrayList();
List.Add( “string” );
List.Add( 1 );
//往数组中添加不同类型的元素

object[] values = List.ToArray(typeof(object)); //正确
string[] values = (string[])List.ToArray(typeof(string)); //错误

和数组不一样,因为可以转换为Object数组,所以往ArrayList里面添加不同类型的元素是不会出错的,但是当调用ArrayList方法的时候,要么传递所有元素都可以正确转型的类型或者Object类型,否则将会抛出无法转型的异常。


五 缺陷

查询速度较快,不利于增删改

java ArrayList集合 什么是集合​ 提供一种存储空间可变的存储模型,存储的数据容量可以发生改变ArrayList集合的特点​ 长度可以变化,只能存储引用数据类型。泛型的使用​ 用于约束集合中存储元素的数据类型。 阅读详情

相关推荐

将雷达连接到树莓派的串口

dev/ttyAMA0 是树莓派的主要 UART(用于 GPIO 引脚 8 (TXD) 和 10 (RXD))。通常,树莓派使用 GPIO 引脚 8 (TXD) 和 10 (RXD) 进行串口通信。树莓派上通常有两个串口:/dev/ttyS0 和 /dev/ttyAMA0。你需要确认雷达的 TX 和 RX 引脚,并与树莓派的对应引脚连接。VCC(电源)连接到树莓派的 3.3V 或 5V(根据雷达的要求)MR(Receive)连接到树莓派的 GPIO 8 (TXD)GND(地)连接到树莓派的 GND。

qq_45943628的博客 1465

Java List与ArrayList 的区别(List list =new Arraylist(); ArrayList<String> arrayList = new ArrayList())

一般想知道List 与ArrayList 的区别可能大部分都是看到了 List list = new ArrayList(); 和 ArrayList arrayList = new ArrayList<>(); 想知道它们的区别? List 是一个接口,如果忘记点击List 跳转到源码里面看下 List的如下 ArrayList 是一个类 他实现了List 这个接口 所以List 里面的方法,ArrayList 里面也都有,但是ArrayList 里面新增的方法List 里面是没有的比如从

小牧在一直在学习,在前进的道路上大家一起学习,进步。 2551

新手避坑指南:从GEO数据库下载单细胞测序数据的5个关键步骤(附实操截图)

本文为单细胞测序数据下载新手提供5个关键避坑步骤,涵盖数据搜索准备、样本量评估、文件选择决策、元数据诊断及高效下载技术。通过实操截图和代码示例,帮助研究者快速锁定GEO数据库中的优质单细胞测序数据,避免常见错误。

weixin_30296405的博客 667

<Java八股文面试>ArrayList源码 | Iterator源码 | LinkedList和ArrayList对比

<Java八股文面试>ArrayList源码 | Iterator源码 | LinkedList和ArrayList对比

LXYDSF的博客 1908

光模块MCU开发全解析:从架构原理到固件调试实战

在高速光模块中,MCU并非传统印象里的核心处理器,而是负责数字诊断、闭环控制和协议管理的嵌入式管家。随着800G、1.6T模块的普及,MCU与DSP/SoC的协同、I2C总线通信、ADC采集、APC/TEC控制等低速域任务愈发关键。理解MCU的选型规格、启动流程和固件设计,是保障光模块稳定运行的基础。本文从光模块架构切入,剖析MCU的角色定位,详细拆解I2C从机实现、电芯片配置、校准与升级等工程细节,并结合实际调试经验梳理常见故障与排查思路,为嵌入式工程师提供一份可落地的光模块MCU开发指南。

weixin_29192365的博客 365

完整版:ultralytics下运行yoloworld并训练

本文介绍了Ultralytics YOLO环境的快速配置与使用流程:1) 通过conda创建Python 3.9环境并安装依赖包;2) 配置中科大镜像源加速安装PyTorch和Ultralytics;3) 准备YOLO格式数据集并修改data.yaml配置文件;4) 提供模型预测、训练和验证的常用指令,包括predict/train/val等命令参数设置。文章还包含CLIP模型下载、权重文件获取以及本地安装等注意事项,完整覆盖了从环境搭建到模型部署的全过程。

weixin_50209871的博客 1344

【数据结构】List与ArrayList

Java List接口与顺序表实现 本文介绍了Java集合框架中的List接口及其实现原理。List是继承自Collection的线性表接口,具备有序元素管理能力。文章首先分析了List接口的定义和核心方法,包括继承自Collection的基础方法和List特有的位置操作方法。 重点介绍了顺序表(数组实现)这一线性表的物理存储结构,并详细演示了如何自定义实现顺序表(MyArrayList)。包括: 异常类设计(空表异常和索引非法异常) 核心成员变量和构造方法 工具方法实现(边界校验、动态扩容) 核心功能实现

记录了从0学习Java技术栈的日常 1250

24、水下传感器网络中混合LEACH协议与遗传算法获取路由节点

本文提出了一种结合遗传算法与LEACH协议的混合路由方案,用于提升水下无线传感器网络(UWSN)的能量利用效率和数据传输稳定性。通过遗传算法优化簇头选择与路径规划,有效避免节点过早死亡,减少能量消耗,在200个节点场景下显著提升网络寿命。相比传统LEACH协议,该方案具有更高的能量利用率、更强的环境适应性,并支持传输历史记录与并行传输序列。实验结果显示,该方案在总能量为2000焦耳时剩余能量达75.6%,远优于LEACH的34.8%能耗表现。适用于海洋监测、石油平台监控及水下灾害预警等复杂环境应用。

i8j9k0l1的博客 112

【ArrayList源码】ArrayList构造方法

文章目录ArrayList简介1 无参构造方法2 一个参数的构造方法,参数为初始的容量3 参数为集合的构造方法 ArrayList简介 ArrayList称为数组链表,它是继承AbstractList,并实现了List、RandomAccess、Cloneable和Serializable接口 public class ArrayList<E> extends AbstractList...

It一zhai男 3566

eNSP常见故障处理

eNSP无法启动设备一直停在#井号的问题的解决方案?

lvshiliang123的博客 2万+

外向交货单批次赋值的标准姿势:用 BAPI_OUTB_DELIVERY_CHANGE 把 LIPS-CHARG 改得稳、改得干净

摘要: 外向交货单批次赋值涉及严格的业务约束,包括批次管理状态、单据状态、拆分规则等,直接更新表 LIPS 不可取。推荐使用 BAPI_OUTB_DELIVERY_CHANGE 接口,通过标准业务逻辑实现批次修改。关键点包括:区分单批次分配与批次拆分场景,正确设置 ITEM_CONTROL 控制结构,并确保单位/数量数据完整。附可直接执行的ABAP代码示例,实现安全可靠的批次更新流程。 (字数:149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 397

C# ArrayList的用法

ArrayList是一个动态数组,相比普通数组支持自动扩容和灵活的元素操作。它提供添加元素的方法(Add/Insert/InsertRange)、删除元素的方法(Remove/RemoveAt/RemoveRange/Clear)以及排序查找功能(Sort/Reverse/IndexOf/Contains)。通过索引访问元素,并可通过Capacity和Count属性管理容量。虽然使用方便,但性能略低,对类型安全要求高的场景建议使用泛型集合List<T>。主要适用于需要频繁修改集合内容的场景。

德仔 1517

【华为OD机试真题】65、高矮个子排队 | 机试真题+思路参考+代码解析 (C++、Java、Py、C语言、JS)

题目描述 >现在有一队小朋友,他们高矮不同,我们以正整数数组表示这一队小朋友的身高,如数组{5,3,1,2,3}。 >  我们现在希望小朋友排队,以"高" "矮" "高" "矮" 顺序排列,每一个高位置的小朋友要比相邻的位置高或者相等;每个 "矮" 位置的小朋友要比相邻的位置矮或者相等; >  要求小朋友们移动的距离和最小,第一个从“高"位开始排,输出最小移动距离即可。 >  例如,在示范小队{5,3,1,2,3}中, {5, 1, 3, 2, 3}是排序结果。 > 

KJ.JK 2101

ArrayList和CopyOnWriteArrayList

1.ArrayList查询快而增删慢 1、底层是数组,初始化大小为10 2、插入时会判断数组容量是否足够,不够的化会进行扩容 3、所谓扩容就是新建一个数组,然后将老的数据里面的元素复制到新的数组里面 4、移除元素的时候也涉及到数组中元素的移动,删除指定index位置的元素,然后将index+1至数组最后一个元素往前移动一格 结论: ArrayList底层是数组,所以查询的时候直接根据索引可以很快地找到对应地元素,改也是如此,找到index对应元素进行替换。而增加和删除就涉及到数组元素地移动,所以会比较

mhbsoft的博客 977

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Arraylist集合

如何使用集合ArrayList

qq_64580260的博客 1461

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ArrayList详解

ArrayList详解(包括部分源码的简单分析)

2301_79958614的博客 1415

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

ArrayList 和LinkedList的区别比较

‌ArrayList和LinkedList的主要区别在于它们的底层数据结构、性能特点以及适用场景。‌ArrayList和LinkedList从名字分析,他们一个是Array(动态数组)的数据结构,一个时Linked(链表)的数据结构,此外,他们两个都是对List接口的实现。前者是数组队列,相当于动态数组;后者为双向链表结构,也可当作堆栈、队列、双端队列。

A_aspectJ的博客 4568

JAVA-顺序表ArrayList(实现ArrayList)

在集合框架中,List是一个接口,继承自Collection。Collection也是一个接口,该接口中规范了后序容器中常用的一些方法,具体如下所示:Iterable也是一个接口,表示实现该接口的类是可以逐个元素进行遍历的,具体如下:站在数据结构的角度来看,List就是一个线性表,即n个具有相同类型元素的有限序列,在该序列上可以执行增删 改查以及变量等操作。在集合框架中,ArrayList是一个普通的类,实现了List接口,具体框架图如下:【说明】

Lizhihao_的博客 1409

List、ArrayList 与顺序表

本文详细介绍了Java中List接口及其实现类ArrayList的相关知识。主要内容包括:1. List接口的定义与继承关系,以及ArrayList和LinkedList的实现特点;2. 线性表的数据结构特性及存储方式;3. 通过自定义MyArrayList类实现顺序表的基本操作(增删查改等);4. 深入分析ArrayList的源码实现,包括成员变量、构造方法、常用方法和遍历方式;5. 实际应用案例(字符串处理、杨辉三角、扑克牌游戏)展示了ArrayList的使用场景;6. 探讨了ArrayList的优缺点

Y409001的博客 863

ArrayList和Vector

ArrayList和Vector同步性ArrayList是非同步的,Vector是同步的。性能:由于同步开销,ArrayList的性能通常优于Vector。扩容方式ArrayList扩容为原容量的 1.5 倍,而Vector默认扩容为原容量的 2 倍。历史背景Vector是早期的集合类,设计时考虑了线程安全,而ArrayList是为了提供更高性能的非同步列表。在现代 Java 开发中,ArrayList是更常用的选择。Vector通常只在需要向后兼容旧代码或必须使用同步集合的情况下使用。

Flying_Fish_roe的博客 1209

DataTable 转 ArrayList

从数据库获取到的数据放到DataTable可能不是我们想要的格式,可以将他们转为ArrayList 首先声明名称为Data2JSON的方法,并且这个方法需要接收一个DataTable public ArrayList Data2JSON(DataTable td) { } 存放修改格式后的数据 ArrayList arr = new ArrayList(); DataTable中的全部数据 获取...

weixin_43405525的博客 1371

ArrayList —(下)

ArrayList常见操作及遍历总结

m0_68993867的博客 1123
上一篇: java中常用的类1
下一篇: 硬盘与内存的区别
java_5666666
博客等级 码龄9年 6粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值