集合中的List方法简介
arraylist与vector的区别
这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,我们以后可以按位置索引号取出某个元素,并且其中的数据是允许重复的,这是HashSet之类的集合的最大不同处,HashSet之类的集合不可以按索引号去检索其中的元素,也不允许有重复的元素。
ArrayList与Vector的区别,这主要包括两个方面:
(1)同步性:
Vector是线程安全的,也就是说是它的方法之间是线程同步的,而ArrayList是线程序不安全的,它的方法之间是线程不同步的。
- 如果只有一个线程会访问到集合,那最好是使用ArrayList,因为它不考虑线程安全,效率会高些;
- 如果有多个线程会访问到集合,那最好是使用Vector,因为不需要我们自己再去考虑和编写线程安全的代码。
备注:对于Vector&ArrayList、Hashtable&HashMap,要记住线程安全的问题,
记住Vector与Hashtable是旧的,是java一诞生就提供了的,它们是线程安全的,ArrayList与HashMap是java2时才提供的,它们是线程不安全的。所以,我们讲课时先讲老的。
(2)数据增长:
ArrayList与Vector都有一个初始的容量大小,当存储进它们里面的元素的个数超过了容量时,就需要增加ArrayList与Vector的存储空间,每次要增加存储空间时,不是只增加一个存储单元,而是增加多个存储单元,每次增加的存储单元的个数在内存空间利用与程序效率之间要取得一定的平衡。
Vector默认增长为原来两倍,而ArrayList的增长策略在文档中没有明确规定(从源代码看到的是增长为原来的1.5倍)。ArrayList与Vector都可以设置初始的空间大小,Vector还可以设置增长的空间大小,而ArrayList没有提供设置增长空间的方法。
总结:即Vector增长原来的一倍,ArrayList增加原来的0.5倍。
import java.util.List;
import java.util.ArrayList;
import java.util.Vector;
//知识点:有序集合的相关方法介绍
public class TestAbstractList{
public static void main(String []args){
//规范写法:所有对象的声明都用父类进行声明,创建子类对象
List<String> al=new ArrayList<String>();
//方法1:public boolean add(E o):将指定的元素追加到此列表的尾部。
boolean iden=al.add("hello");//布尔型的返回值可以用对象直接调用方法,而不必再声明一个布尔类型的变量来接受返回值
System.out.println(iden);
al.add("hello");
al.add("helloworld");
int size=al.size();
for(int i=0;i<size;i++){
//方法2:public E get(int index):返回此列表中指定位置上的元素。
String str=al.get(i);
System.out.println(str);
}
System.out.println("******************************");
//注意方法3与方法4的区别
//方法3:public void add(int index,E element):将指定的元素插入此列表中的指定位置。向右移动当前位于该位置的元素(如果有)以及所有后续元素(将其索引加 1)。
//方法4:public E set(int index,E element):用指定的元素替代此列表中指定位置上的元素。
al.add(1,"龙卷风");
al.set(3,"会覆盖helloworld吗?会");
size=al.size();
for(int i=0;i<size;i++){
String str=al.get(i);
System.out.println(str);
}
//方法5:public void clear():移除此列表中的所有元素。此调用返回后,列表将为空。
al.clear();
size=al.size();
System.out.println(size);
System.out.println("*******************************");
//方法6:public boolean contains(Object elem):如果此列表中包含指定的元素,则返回 true。
al.add("hello");
al.add("world");
boolean iden1=al.contains("hello");//输出ture;
boolean iden2=al.contains("helloworld");//输出false;
System.out.println(iden1+" "+iden2);
//方法7:public int indexOf(Object elem):搜索给定参数第一次出现的位置,使用 equals 方法进行相等性测试。
//即返回给定元素的数组下标
int index=al.indexOf("world");//字符串world的下标为1
System.out.println(index);
//方法8:public int lastIndexOf(Object elem)返回指定的对象在列表中最后一次出现的位置索引。
//即返回指定元素(里面有重复元素)的最后一个元素的下标
al.add("world");
al.add("hello");
int lastindex=al.lastIndexOf("hello");//有2个hello会返回那个hello的下标呢
System.out.println(index+" "+lastindex);
//方法9:public boolean isEmpty()测试此列表中是否没有元素。
boolean iden3=al.isEmpty();
System.out.println(iden3);//为空时返回ture;不为空返回false
System.out.println("***************************************");
//方法10:public boolean remove(Object o)从此列表中移除指定元素的单个实例(如果存在),此操作是可选的。
//返回:如果此列表包含指定的元素,则返回 true。
al.remove("hello");
al.remove("world");
size=al.size();
System.out.println(size);
//方法11:public E remove(int index)移除此列表中指定位置上的元素。向左移动所有后续元素(将其索引减 1)。
al.add("hello");
al.add("world");
String remove=al.remove(2);
size=al.size();
System.out.println(remove+" "+size);
System.out.println("**********************************");
//方法12:Object[] toArray():返回以正确顺序包含列表中的所有元arr[0]+" "+素的数组。
String []a=new String[al.size()];
String []arr=al.toArray(a);
System.out.println(arr[1]+" "+arr[2]);
}
}