ArrayList和数组哪个更好用

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

  private Shape[] arrayshape = new Shape[520];
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编程中必须掌握的知识点。

猜你喜欢

转载自blog.csdn.net/weixin_65240122/article/details/132322845