(三十八)ArrayList、Vector、LinkedList有什么区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiangshangchunjiezi/article/details/88027663

ArrayList、Vector、LinkedList类均在java.util包中,均为可伸缩数组,即可以动态改变长度的数组。

一、ArrayList、Vector

相同点:

①都是基于存储元素的Object[] array来实现的,他们会在内存中开辟一块连续的空间来存储

(因为连续,所以可以用下标来访问元素,同时索引数据的速度比较快)

②插入元素时需要移动容器中的元素,所以虽数据的插入操作执行得比较慢

③都有一个初始化的容量的大小,当里面存储的元素超过这个大小时,需要动态的扩充他们的存储空间。Vector默认扩充原来的2倍(每次扩充空间的大小是可以设置的),ArrayList默认扩充原来的1.5倍(没有提供方法)

import  java.util.*;
public class HelloWorld {
    public static void main(String []args) {
       ArrayList<Integer> al=new ArrayList<Integer>();
	   al.add(0,100);
	   System.out.println(al.get(0));//根据索引,获得元素
	   System.out.println(al.indexOf(100));//根据元素,获得索引
	   al.add(1,200);
	   al.remove(0);
	   System.out.println(al.contains(100));
	   System.out.println(al.get(0));//200
		
	  Vector<String> v=new Vector<String>();
	  v.add(0,"100");
	   System.out.println(v.get(0));//根据索引,获得元素
	   System.out.println(v.indexOf("100"));//根据元素,获得索引
	   v.add(1,"200");
	   v.remove("100");
	   System.out.println(v.contains("100"));
	   System.out.println(v.get(0));//200
    }
}

不同点:

①ArrayList的方法是同步的,而Vector的绝大多数方法都是直接同步或者间接同步的,所以Vector是线程安全的,ArrayList不是线程安全的。正是因为Vector提供了线程安全的机制,其性能上也就略逊与ArrayList

二、LinkedList

方法:https://blog.csdn.net/jiangshangchunjiezi/article/details/75210587

LinkedList采用双向链表来实现的

①随机访问效率低:对数据的索引需要从链表头开始遍历

②插入元素:无需对数据移动

③非线程安全的容器

三、容器如何选择

当对数据的操作是索引或只在集合的末端增加、删除元素,使用ArrayList、Vector效率比较高;

当对数据的操作只要为指定位置的插入、删除操作时,用LinkedList效率比较高

当多线程时,Vector安全

猜你喜欢

转载自blog.csdn.net/jiangshangchunjiezi/article/details/88027663