java中的ArrayList类的使用弥补了数组使用的麻烦,实现了List接口,此类还提供一些方法来操作内部用来存储列表的数组的大小,ArrayList类有几个常用的方法:
add();//向集合中添加对象,集合中可以添加任何对象包括集合,但是用add方法添加后再遍历出来后,添加的那一项还是以集合的形式显示,它不会把一个集合对象中的每个元素依次添加上,要实现此结果还得用addAll();方法
size();//得到集合的大小
remove(int index);//移除集合中某索引对象
get(int index);//得到某一索引的对象,此方法可以对集合进行遍历,或许用迭代器进行遍历下面简单介绍迭代器的使用方法以备下面用到:public static void main(String[] args) {
ArrayList list=new ArrayList();
list.add("A");
list.add("B");
list.add("H");
list.add("E");
list.add("J");
Iterator ite=list.iterator(); //定义的迭代器
while(ite.hasNext()){//在循环条件里判断当前对象的下一个位置是否有内容,如果有则使用,没有则结束循环
System.out.println(ite.next());
}
}
ArrarList类,LinkedList类,Vector类 三个类都实现了Set接口,所以说这三个类应该都有如上所说的ArrayList类的所有方法,但是其却又三个不同的名字,肯定是有区别的,下面介绍一下三者的区别
1.ArrayList类与LinkedList类的区别
ArrayList类纯粹是在内存中式以一种顺序的方式把对象保存起来,其要执行删除或插入对象操作之后,还要对对象重新分配索引号,但是如果这个集合的大小非常大的时候就体现出差别了,比如有ArrayList的size为1000,当我们需要删除索引为3的对象的时候,就要把索引为3的之后的所有对象重新分配索引,需要执行997次,想象一下就删除一个对象就要进行那么多次无用的操作,对程序的性能影响肯定不小,但是该怎么办呢?这时候LinkedList类就该发挥长处了,LinkedList类保存对象之后,是把对象以链表的形式存放,即每一个对象都有一个链接指向其下一个对象,这个链表叫单向链表,每一个对象都有一个链接指向其下一个对象和它的上一个对象叫双向链表,现在先不分析java中到底是单向还是双向的,但这种链表在一个庞大的集合中执行删除操作的时候,就比如刚才的集合size=1000,只需要把索引为2的对象指向4,在把索引为4的对象指向2就完成了删除操作,相比于ArrayList类已经是一个很大的改进了
2.ArrayList类与Vector类的区别
首先就是出现的先后的不同了,Vector类在jdk1.0的时候就有了,而ArrayList类在jdk1.2才出现
其次是扩展大小上的区别,在上一篇文章中提到数组大小扩展的方法,其实集合可以无限制添加对象就是使用了这样的一种模式,但是这两个类在每次扩展的大小上是不同的,ArrayList类每次仅扩展了以前数组大小的一半,而Vector类则是扩展了当前数组的一倍,这样的话当最后一次的扩展Vector类不就占用了更多的内存空间,所以说在数组大小扩展上ArrayList类是优于Vector类的
最后区别是在多个线程同时访问集合,ArrayList类允许多个线程访问到集合,也就是可以在同一时间对集合进行结构上的修改,它是不同步的,这样的话线程上就显现除不安全的一面,但是Vector类就不会出现这样的情况,它必须在当一个线程操作此集合的时候其他线程是不能访问到的,这样就保证了集合的同步性和安全性