开课吧Java课堂:什么是ArrayList类

ArrayList类扩展AbstractList并执行List接口。ArrayList支持可随需要而增长的动态数组。在Java中,标准数组是定长的。在数组创建之后,它们不能被加长或缩短,这也就意味着你必须事先知道数组可以容纳多少元素。

但是,你直到运行时才能知道需要多大的数组。为了解决这个问题,类集框架定义了ArrayList。本质上,ArrayList是对象引用的一个变长数组。也就是说,ArrayList能够动态地增加或减小其大小。数组列表以一个原始大小被创建。当超过了它的大小,类集自动增大。当对象被删除后,数组就可以缩小。

注意:动态数组也被从以前版本遗留下来的类Vector所支持。关于这一点,将在章后面介绍。ArrayList有如下的构造函数:

ArrayList( ) 
ArrayList(Collection c) 
ArrayList(int capacity) 

其中第一个构造函数建立一个空的数组列表。第二个构造函数建立一个数组列表,该数组列表由类集c中的元素初始化。第三个构造函数建立一个数组列表,该数组有指定的初始容量(capacity)。容量是用于存储元素的基本数组的大小。当元素被追加到数组列表上时,容量会自动增加。

下面的程序展示了ArrayList的一个简单应用。首先创建一个数组列表,接着添加类型String的对象(回想一个引用字符串被转化成一个字符串(String)对象)。接着列表被显示出来。将其中的一些元素删除后,再一次显示列表。

// Demonstrate ArrayList. 
import java.util.*; 
class ArrayListDemo { 
 public static void main(String args[]) { 
 // create an array list 
 ArrayList al = new ArrayList(); 
 
 System.out.println("Initial size of al: " + 
 al.size()); 
 // add elements to the array list 
 al.add("C"); 
 al.add("A"); 
 al.add("E"); 
 al.add("B"); 
 al.add("D"); 
 al.add("F"); 
 al.add(1, "A2"); 
 System.out.println("Size of al after additions: " + 
 al.size()); 
 // display the array list 
 System.out.println("Contents of al: " + al); 
 // Remove elements from the array list 
 al.remove("F"); 
 al.remove(2); 
 System.out.println("Size of al after deletions: " + 
 al.size()); 
 System.out.println("Contents of al: " + al); 
 } 
}

该程序的输出如下所示:

Initial size of al: 0 
Size of al after additions: 7 
Contents of al: [C, A2, A, E, B, D, F] 
Size of al after deletions: 5 
Contents of al: [C, A2, E, B, D] 

注意a1开始时是空的,当添加元素后,它的大小增加了。当有元素被删除后,它的大小又会变小。

在前面的例子中,使用由toString( )方法提供的默认的转换显示类集的内容,toString( )方法是从AbstractCollection继承下来的。尽管它对简短的例子程序来说是足够了,然而很少使用这种方法去显示实际中的类集的内容。通常编程者会提供自己的输出程序。但在下面的几个例子中,仍将采用由toString( )方法创建的默认输出。

尽管当对象被存储在ArrayList对象中时,其容量会自动增加。

仍可以通过调用ensureCapacity( )方法来人工地增加ArrayList的容量。如果事先知道将在当前能够容纳的类集中存储许许多多的项时,你可能会想这样做。在开始时,通过一次性地增加它的容量,就能避免后面的再分配。因为再分配是很花时间的,避免不必要的处理可以改善性能。ensureCapacity( )方法的特征如下所示:

void ensureCapacity(int cap) 

这里,cap是新的容量。相反地,如果想要减小在ArrayList对象之下的数组的大小,以便它有正好容纳当前项的大小,可以调用trimToSize( )方法。该方法说明如下:

void trimToSize( ) 

从数组列表(ArrayList)获得数组(Array)当使用ArrayList时,有时想要获得一个实际的数组,这个数组包含了列表的内容。正如前面解释的那样,可以通过调用方法toArray( )来实现它。下面是几个为什么可能想将类集转换成为数组的原因:
· 对于特定的操作,可以获得更快的处理时间。
· 为了给方法传递数组,而方法不必重载去接收类集。
· 为了将新的基于类集的程序与不认识类集的老程序集成。

无论何种原因,如下面的例子程序所示,将ArrayList转换成数组是一件繁琐的事情。

// Convert an ArrayList into an array. 
import java.util.*; 
class ArrayListToArray { 
 public static void main(String args[]) { 
 // Create an array list 
 ArrayList al = new ArrayList(); 
 
 // Add elements to the array list 
 al.add(new Integer(1)); 
 al.add(new Integer(2)); 
 al.add(new Integer(3)); 
 al.add(new Integer(4)); 
 System.out.println("Contents of al: " + al); 
 
 // get array 
 Object ia[] = al.toArray(); 
 int sum = 0; 
 // sum the array 
 for(int i=0; i<ia.length; i++) 
 sum += ((Integer) ia[i]).intValue(); 
 System.out.println("Sum is: " + sum); 
 } 
}

该程序的输出如下所示:

Contents of al: [1, 2, 3, 4] 
Sum is: 10 

程序开始时创建一个整数的类集。正如上面做出的解释那样,由于不能将原始类型存储在类集中,因此类型Integer的对象被创建并被保存。接下来,toArray( )方法被调用,它获得了一个Objects数组。

这个数组的内容被置为整型(Integer),接下来对这些值进行求和。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值