Java(3-4)

本文详细介绍了Java中的ArrayList类,包括如何创建、使用确保容量的方法、如何调整数组列表的大小以及访问和修改元素的方法。同时对比了数组列表与传统数组的优劣。

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

①泛型数组列表
在很多程序语言中,尤其c语言中,必须在编译时就确定数组的大小。这往往会造成不必要的空间浪费,一旦确定了数组大小,就很难再改变了。针对这一点,java中使用一个在Java中被称为ArrayList的类。它使用起来有点像数组,但在添加或删除元素时,具有自动调节数组容量的功能,而不需要为此编写任何代码。
ArrayList是一个采用类型参数的泛型类。为了指定数组列表保存的元素对象类型,需要用一对尖括号将类名括起来加在后面
例如:ArrayList<Employee>staff = new ArrayList<Employee>();

这被称为菱形语法,因为空尖括号<>就像是一个菱形。

使用add方法可以将数组添加到数组列表中。例如:

staff.add(new Employee("Lucifer",... ... ));

数组列表管理着对象引用的一个内部数组。最终,数组全部的空间都有可能被用尽。这时,如果调用add方法,数组列表就会自动的创建一个更大的数组,并将所有的对象从较小的数组中拷贝到较大的数组中。

如果已经清楚或能够估计出数组可能存储的元素数量,就可以在填充数组之前调用ensureCapacity方法:

staff.ensureCapacity(100);

这个方法调用将分配一个包含100个对象的内部数组。然后调用100次add,而不用重新分配空间。

另外还可以把初始容量传递给ArrayList构造器:

ArrayList<Employee> staff = new ArrayList(100);

size方法将返回数组列表包含的实际元素数目

staff.size()

一旦能确定数组列表的大小不再发生变化,就可以调用trimToSize方法。这个方法将存储区的大小调整为当前元素所需要的存储空间数目。垃圾回收器将回收多余的存储空间。

②访问数组的方法:
很遗憾,人有悲欢离合,月有阴晴圆缺,不存在完美的事情。数组列表使用get,set,remove方法实现访问或修改数组的操作,而不使用人们喜爱的[]语法格式。
例如,要设置第i个元素,可以使用:staff.set(i,harry);
这等价与对数组a的元素赋值:a[i]=harry;
但是注意,只有当i小于或等于数组列表大小时,才能调用list.set(i,x)使用add方法为数组列表添加新的元素,而不是用set方法,它只能替换数组中已经存在的元素内容
下面这个技巧可以一举两得,既可以灵活的扩展数组列表,又可以方便的访问元素,首先创建一个数组列表,并添加所有元素:

ArrayList<X>list = new ArrayList<>();//这里没给泛型类,注意书上注释
while(...){
    x = ...;
    list.add(x);
}

执行完上述操作后,使用toArray方法将数组元素拷贝到另一个数组中。

X[] a = new X[list.size()]
list.toArray(a);

除了在数组尾部追加元素之外,还可以在数组列表重金插入元素,使用带索引的add方法。

int n = staff.size()/2;
staff.add(n,e);

为了插入一个新的元素,位于n之后的所有元素都要往后移动一个位置。如果插入的新元素超过了容量,数组列表就会被宠幸分配存储空间。

同样的,可以从数组列表中删除一个元素。
Employee e = staff.remove(n);
位于这个位置之后的元素,都向前移动一个位置,并且数组的大小减一。

这样操作的效率很低,对于经常要实现在中间位置插入,删除就应该考虑使用链表了。

注意,用a.get(i)代替a[i]。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值