数组、Vector、List、ArrayList、LinkedList的区别

数组

string [] staff=new string[100];

优点:

  • 高效:数组在内存中是连续存储的,所以它的索引速度是非常的快,而且赋值与修改元素也很简单;

不足:

  1. 插入、删除数据很麻烦,会发生大量的数据拷贝;
  2. 容量固定且无法动态改变:在声明数组的时候,必须同时指明数组的长度,数组的长度过长,会造成内存浪费,数组和长度过短,会造成数据溢出的错误。这样如果在声明数组时我们并不清楚数组的长度,就变的很麻烦了。
总结:容量固定,索引快速,因此主要用于固定长度数组的索引

List
List接口一共有三个实现类,分别是ArrayList、Vector和LinkedList。List用于存放多个元素,能够维护元素的次序,并且允许元素的重复。
它仅仅是一个接口,不能直接通过new来产生对象,需要实现它的方法才能使用,因此一般直接使用它的实现类ArrayList、Vector和LinkedList。

ArrayList
List<String> strList = new ArrayList<String>();  //向上转型
ArrayList<String>  strList2 = new ArrayList<String>();  
介绍:内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。
优点:容量可动态增长
不足:效率不如普通数组,增加、删除元素时效率不如LinkedList
总结:索引效率要求较高,同时又要求动态增长数组时使用ArrayList。基于效率和类型检验,应尽可能使用Array,无法确定数组大小时才使用ArrayList,同时ArrayList的功能比Array强。

Vector
Vector<String> vec = new Vector<String>();
介绍:通过数组实现的,能动态增长,与ArrayList不同的是它支持线程的同步,是线程安全的,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。

关于ArrayList和Vector区别如下:
  1. ArrayList在内存不够时默认是扩展50% + 1个,Vector是默认扩展1倍。
  2. Vector提供indexOf(obj, start)接口,ArrayList没有。
  3. Vector属于线程安全级别的,但是大多数情况下不使用Vector,因为线程安全需要更大的系统开销。

LinkedList
List<String> strList = new LinkedList<String>();  //向上转型为List
LinkedList<String> strList = new LinkedList<String>();
介绍:用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。另外,他还提供了List接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。
优点:容量动态增长,元素的增加、删除效率极高。
缺点:索引慢
总结:主要用于增删元素


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值