1.ArrayList的使用
ArrayList是一个针对List接口的数组实现,由于List是允许保存重复数据的,即ArrayList也是允许保存重复数据的。
List本身有一个好的支持:存在get方法,可以利用get()方法结合索引取得数据。
eg:List的get()操作:
public class TestGet {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Hello");
list.add("Hello");
list.add("Hi");
for (int i = 0;i < list.size();i++){
System.out.println(list.get(i));
}
}
}
get()方法是List子接口提供的。如果夏娜在操作的是Collection接口,那么此时的数据取出只能将集合变为对象数组操作。
eg:通过Collection进行输出处理
public class TestGet {
public static void main(String[] args) {
Collection<String> list = new ArrayList<>();
list.add("Hello");
list.add("Hello");
list.add("Hi");
//输出结构为数组
Object[] result = list.toArray();
System.out.println(Arrays.toString(result));
}
}
2.LinkedList的使用
LinkedList子类如果向父接口转型的话,与ArrayList使用相同。
eg:LinkedList的使用:
public class Test {
public static void main(String[] args) {
List<String> list = new LinkedList<>();
list.add("Hello");
list.add("Hello");
list.add("Hi");
//输出为:[Hello,Hello,Hi]
System.out.println(list);
list.remove("Hello");
//输出为:[Hello,Hi]
System.out.println(list);
}
}
3.旧的子类 Vector的使用
eg:Vector的使用
public class Test {
public static void main(String[] args) {
List<String >list = new Vector<>();
list.add("Hello");
list.add("Hello");
list.add("Hi");
System.out.println(list);
}
}
ArrayList、Vector、LinkedList的区别
ArrayList、Vector的区别:
-
出现版本:
ArrayList:JDK1.2
Vector JDK1.0(出现在List、Collection接口之前) -
初始化策略区别:
Vector 在无参构造执行后将数组大小初始化为10ArrayList采用懒加载策略,在构造方法阶段并不初始化对象数组,在第一次添加元素时才初始化对象数组大小为10; -
扩容策略:
ArrayList扩容时,新数组大小,变为原数组的1.5倍Vector扩容时,新数组大小变为原数组的2倍 -
线程安全性:
ArrayList采用异步处理,线程不安全,效率较高Vector 采用在方法上加锁,线程安全,效率较低(即便要使用线程不安全的List,也不使用Vector) -
遍历Vector支持较老的迭代器(Enumeration),而ArrayList不支持
ArrayList、Vector的共同点:底层均使用数组实现。
ArrayList 和 LinkedList的:ArrayList:底层采用数组实现LinkedList底层采用双向链表实现
ArrayList , Vector , LinkedList这三个子类在使用上没有任何区别。