ArrayList和数组的优缺点比较

ArrayList通俗来说就是一个动态的数组,它可以动态地增加和减少元素,实现了ICollection和IList接口。相比数组,有很大的优势。我们先来看一下数组的定义及使用,再看看ArrayList,观察一下它们的优缺点。

     private Shape[] arrayshape = new Shape[250];
	public void setShape(int x1, int y1, Color color) {
	Shape shape = new Shape(x1, y1, color);
	arrayshape[index++] = shape;
	}
        	 for(int i=0;i<mouse.index;i++)
             {
        		Shape shape=arrayshape[i];
        		if(shape!=null) 
        		{
             	shape.drawShape(g);
        		}
        		else
        		break;
	 public void drawShape(Graphics g)
	 {
		 g.setColor(color);
		 g.drawOval(x1-CHESS_SIZE/2, y1-CHESS_SIZE/2, CHESS_SIZE, CHESS_SIZE);
		 g.fillOval(x1-CHESS_SIZE/2, y1-CHESS_SIZE/2, CHESS_SIZE, CHESS_SIZE);		 		
	 }	

我们这里不深究具体代码及其参数,主要观察数组的使用。第一个语句定义了一个数组,这里我们可以明显发现我们需要手动去定义数组的长度,也就是说数组的大小已经被框死了,而且其存储的形式是连续的,这不便于数据的添加,插入和移除。其赋值和修改的方式都是基于其角标。在java中,数组可以存对象,在定义对象时为对象赋予相应的参数并将其存入数组,取出时,也只要把它取出为拥有自己属性的对象,然后便可以对其进行操作。在这个过程中,我们经常用到循环的方式。的确,它也是有自己的优势的,操作简单,速度快!
然后我们再来看看ArrayList:

static ArrayList<Bullet> bulletsMe = new ArrayList<Bullet>();//static可以保证对象的唯一性,别处通过类来调用
public void addBulletMe() {
int num = 1 + (int) (Math.random() * 20);
Bullet bullet = new Bullet(bluePlane.x+bluePlane.size/2-15, bluePlane.y, num,0);
bulletsMe.add(bullet);
	}
for(int i=0;i<Listener.bulletsMe.size();i++){
					if(Listener.bulletsMe.get(i).type==0)
					{
					Bullet bullet = Listener.bulletsMe.get(i);
					bullet.y -= 5;
					}

这依然是从程序中截取的关于ArrayList的部分代码,涉及到定义,存对象,取对象的操作。这里涉及到了static的一处应用,我们简单解释一下,static可以确保这个ArrayList对象在程序中的唯一性,比较方便的是我们在其他类中可以通过ArrayList所在类(此处是Listener)直接调用这个ArrayList对象。我们可以发现,ArrayList没有设定长度,因此,它具有很大的灵活性,似乎ArrayList和数组相比更胜一筹,但事实也确实是这样,ArrayList的可操作性很强,我们下面简单介绍它的一些方法:
1.add(E e)
将指定的元素添加到此列表的尾部。
2.add(int index, E element)
将指定的元素插入此列表中的指定位置。
3.addAll(Collection<? extends E> c)
按照指定 collection 的迭代器所返回的元素顺序,将该 collection 中的所有元素添加到此列表的尾部。
4.addAll(int index, Collection<? extends E> c)
从指定的位置开始,将指定 collection 中的所有元素插入到此列表中。
5.clear()
移除此列表中的所有元素。
6.clone()
返回此 ArrayList 实例的浅表副本。
7.contains(Object o)
如果此列表中包含指定的元素,则返回 true。
8.ensureCapacity(int minCapacity)
如有必要,增加此 ArrayList 实例的容量,以确保它至少能够容纳最小容量参数所指定的元素数。
9.get(int index)
返回此列表中指定位置上的元素。
10.indexOf(Object o)
返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。
11.isEmpty()
如果此列表中没有元素,则返回 true
12.lastIndexOf(Object o)
返回此列表中最后一次出现的指定元素的索引,或如果此列表不包含索引,则返回 -1。
13.remove(int index)
移除此列表中指定位置上的元素。
14.remove(Object o)
移除此列表中首次出现的指定元素(如果存在)。
15.removeRange(int fromIndex, int toIndex)
移除列表中索引在 fromIndex(包括)和 toIndex(不包括)之间的所有元素。
16.set(int index, E element)
用指定的元素替代此列表中指定位置上的元素。
17.size()
返回此列表中的元素数。
18.toArray()
按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组。
19.toArray(T[] a)
按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。
20.trimToSize()
将此 ArrayList 实例的容量调整为列表的当前大小。
确实,ArrayList和数组相比有更加强大的功能,可以对数据方便地添加,插入和移除,在复杂工程中有更广泛地应用前景,但当向集合插入不同类型的数据后,在进行数据处理时容易出现类型不匹配的错误,使用时需要进行类型转换处理,存在装箱与拆箱操作,造成性能大量损耗。综合来说,ArrayList优于数组,它也是java编程中必须掌握的知识点。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值