ArrayList
ArrayList是实现了基于动态数组的数据结构,它是一个数组队列,相当于动态数组,也就说,ArrayList对象既有数组的特征,也有链表的特征。众所周知,数组是静态的,数组被初始化之后,数组长度就不能再改变了。与Java中的数组相比,ArrayList的容量能动态增长,即可以动态增加和减少元素,动态改变其大小。ArrayList继承了AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。用ArrayList可以灵活的设置数组的大小。
1、ArrayList的构造函数
1.1 ArrayList类支持3个构造方法
//默认构造函数,该构造方法构造了一个空的链表。
ArrayList()
//capacity是ArrayList的初始容量大小,当增加数据导致链表溢出时,链表容量会自动添加上一次容量大小的一半,该方法构造了一个指定大小但内容为空的链表。
ArrayList(int capacity)
//创建包含collection的ArrayList,该构造方法构造了一个包含指定元素集合的链表,注意,这里的字符E是一个标记,用来表示集合中元素的类型。
ArrayList(Collection<? extends E>collection)
1.2 ArrayList构造方法应用举例
ArrayList list = new ArrayList(); //创建一个空数组链表
ArrayList<String> list = new ArrayList<String>();//创建一个空的数组链表,用来存放String类型的对象
ArrayList<Integer> list = new ArrayList<Integer>(7);//创建一个指定初始容量的数组链表
1.3 ArrayList常用方法
添加方法
-
boolean add(Element e)
增加指定元素到链表尾部。 void add(int index, Element e)
增加指定元素到链表指定位置。
将a添加到list中
list.add("a");
将c添加到list第2个元素后面
list.add(2,"c");
删除方法
-
boolean remove(Element e)
删除链表中的指定元素。
void clear()
清空ArrayList
void remove(int index)
删除链表中指定位置的元素.
protected void removeRange(int start, int end)
删除链表中从某一个位置开始到某一个位置结束的元素。
将list中的数据"a"删除
list.remove("a");
清空list
list.clear();
将list中第2个数据删除
list.remove(2);
将list中从第1个到第4个之间的所有数据删除
list.subList(2,4).clear();
修改方法
-
E set(int index, E element)
将链表中指定位置上的元素替换成新元素。
将list中第2个元素,修改为A
list.set(2, "A");
查询方法
-
E get(int index)
获取链表中指定位置处的元素.
获取list中第2个元素
String a = list.get(2);
获取链表大小
-
int size()
返回链表长度(链表包含元素的个数)。
1.4 ArrayList与自定义类结合应用
由于在做一个工程时需要用到大量的ListView和GridView,我发现使用与自定义类结合的ArrayList会非常方便又利于扩展,省时省力。
下面就举一个简单的例子来说明:
要求完成一个类似电话簿的ListView,效果图如下:
布局文件其实很简单,主要是在主界面布局中添加ListView了控件,同时还要建立ListView中每个Item的布局文件,当然相对应的我们要为其编写自定义适配器类MainAdapter,此时为了方便Item数据的加载、管理以及将来代码移植的便捷性,我们要再多创建一个类,这个类就是ArrayList中所放元素集合的类型。
布局的部分代码如下图所示:
2、ArrayList可以存放的数据类型
ArrayList类只支持对象类型,不支持基础数据类型。就是说ArrayList对象只能存放对象,不能存放基础数据类型的数据。只要是Object的子类,ArrayList都可以存放。
3、ArrayList与LinkList
参考自博客:http://blog.csdn.net/wuchuanpingstone/article/details/6678653
ArrayList是实现了基于动态数组的数据结构,而LinkedList是基于链表的数据结构。
对于随机访问get和set,ArrayList优于LinkedList,因为ArrayList可以随机定位,而LinkedList要移动指针一步一步的移动到节点处。
对于新增和删除操作add和remove,LinedList比较占优势,只需要对指针进行修改即可,而ArrayList要移动数据来填补被删除的对象的空间。
ArrayList和LinkedList都是集合类,用于存储一系列的对象引用(references)。例如我们可以用ArrayList来存储一系列的String或者Integer。