首先,它们是list的实现类,大致说一下vector arraylist linkedlist的区别。

1、线程安全来讲,
vector是线程安全,arraylist linkedlist线程不安全。
2、底层实现来讲,

vector arraylist是数组,linkedlist是双向链表。

3、效率上讲,
vector比arraylist慢。
由于vector和arraylist底层是数组,所以查找起来很快,
而linkedlist是通过指针查找,所以查找起来相对较慢。
而数组的增、删元素,会引起移动数据,而链表则不会。
例如linkedlist删除某一元素,是将这个元素前后两个元素连接在一起,然后将移出的元素置空,
而如果是往arraylist中增加一个元素,比如add(3,"aaa")是把原来第3这个元素移到第4位,第4位移到第5位,依此类推,空出一个位置用来放加进去的元素。
由此可见,arraylist在增删元素时效率会比linkedlist要慢。
linkedlist有头尾指针,于是它可以addFirst("第一个")和addLast("最后一个"),以及getFirst()和getLast()。
是不是arraylist一定就比linkedlist在增删数据慢呢?
未必!
如果已经找到位置的情况下,确实linkedlist要快一点。但实际上,很多时候都需要先找位置,然后插入。
如果找得太久,arraylist就占优势了。
例如,我们往90000这个位置插入一个元素,arraylist很快就能找到这个位置,然后插入,
而linkedlist需要将指针一个个移到这个位置,再插入。
同样是完成往90000这个位置插入一个元素的任务,谁更快,可想而知。
当然,如果linkedlist一直addFirst或addLast,这样也可以省去查找的时间。
另外,假如有100000个元素,如果是arraylist,往第一个位置增加一个元素,和住第50000个增加元素,和往第100000个增加元素,效果是有很大区别的。
主要是区别在于,移动数据的多少。

4、vector和arraylist的扩容问题,
由于底层是数组,它们在初始化时,都是有长度的。
arraylist初始化的三种方式:
1)不初始化起容量  ArrayList al = new ArrayList();//默认容量为10
2)初始化容量ArrayList al = new ArrayList(3);//初始容量为3
3)以一个集合或数组初始化ArrayList al = new ArrayList(a);//a为集合或数组
当一个长度为10的arraylist在添加第11个元素时,它会以当前长度的1.5倍在堆内存中重新创建一个数组对象,然后把原数组内的数据复制过来,放弃原数组,指向新数组。
vector是同样的道理,只不过,它是以2倍的速度扩容,也就是如果原数组长度是10,那么新数组的长度就是20。

下面是用法例子:

package wzq.j2se.obj;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Vector;

public class ListDemo {

public static void main(String[] args) {
  System.out.println("-------vector--------");
  Vector v = new Vector(4);
  v.add("Test0");
  v.add("Test1");
  v.add("Test0");
  v.add("Test2");
  v.add("Test2");

v.remove("Test0"); //删除指定内容的元素
  v.remove(0); //按照索引号删除元素

int size = v.size();
  System.out.println("size:" + size);
  
  for(int i = 0;i < v.size();i++){
  System.out.println(v.get(i));
  }

System.out.println("-------arraylist--------");

List list = new ArrayList();
  list.add("test0");
  list.add("test1");
  list.add("test2");
  //list.addAll(v);
  list.add("test3");
  list.remove("test1");
  list.remove(2);//注意这儿,是指重新排序后的元素,也就是test3成了第二个元素:test0,test2,test3
  for(int i=0;i<list.size();i++){
   System.out.println(list.get(i));
  }
  
  System.out.println("---------------");
  /*ArrayList与数组之间的转换:
   */
  List list1 = new ArrayList();
  list1.add("1");
  list1.add("2");
  final int size1 = list1.size();
  String[] arr = (String[])list1.toArray(new String[size1]);

System.out.println("arr=="+arr[0]);
  System.out.println("arr=="+arr[1]);
  
  
  String[] arr2 = new String[] {"4", "5"};
  List list2 = Arrays.asList(arr2);
  for(int i=0;i<list2.size();i++){
   System.out.println(list2.get(i));
  }

System.out.println("-------linkedlist--------");
  
     //初使化一个链表
     LinkedList head = new LinkedList();
     head.add(new String("小狗"));
     head.add(new String("美国"));
     head.add(new String("Japanese!"));
     head.add(2, "小猪");
     //链表会自动用遍历的方式打印所有內容
     System.out.println(head);
     //利用Vector或者是ArrayList等Collection往链表中加数据
     Vector v1 = new Vector();
     //向Vector中加入东西
     v1.add("大狗");
     v1.add("老美");
     v1.add("JAPAN");
     v1.add("老猪");
     //将当前Vector加在当前链表的最后
     head.addAll(v1);
     System.out.println(head);
     //将当前Vector加在当前链表的指定位置
     head.addAll(2, v1);
     System.out.println(head);
     //打印指定位置的內容
     System.out.println(head.get(2));
     head.addFirst("第一个");
     System.out.println(head);
     head.addLast("最后一个");
     System.out.println(head);
     //刪除第一个
     head.remove(head.getFirst());
     System.out.println(head);
     //再刪除第一个,采用下标的方式,下标是从0开始的
     head.remove(0);
     System.out.println(head);
     head.remove(head.getLast());
     System.out.println(head);

}

}

java vector arraylist linkedlist用法与区别相关推荐

  1. 读List源码之Vector,ArrayList,LinkedList

    List ,LinkedList,ArrayList,Vector ArrayList与LinkedList(间接),Vector均直接或间接继承自AbstractList,AbstractList实 ...

  2. 牛客网Java刷题知识点之ArrayList 、LinkedList 、Vector 的底层实现和区别

    不多说,直接上干货! 这篇我是从整体出发去写的. 牛客网Java刷题知识点之Java 集合框架的构成.集合框架中的迭代器Iterator.集合框架中的集合接口Collection(List和Set). ...

  3. java vector实现的接口_java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析...

    java面试中经常被问到list常用的类以及内部实现机制,平时开发也经常用到list集合类,因此做一个源码级别的分析和比较之间的差异. 首先看一下List接口的的继承关系: list接口继承Colle ...

  4. 1.3 List集合:ArrayList和LinkedList类的用法及区别

    List集合: List 是一个有序.可重复的集合,集合中每个元素都有其对应的顺序索引. List 集合允许使用重复元素,可以通过索引来访问指定位置的集合元素. List 集合默认按元素的添加顺序设置 ...

  5. ArrayList和LinkedList类的用法及区别

    List 是一个有序.可重复的集合,集合中每个元素都有其对应的顺序索引.List 集合允许使用重复元素,可以通过索引来访问指定位置的集合元素.List 集合默认按元素的添加顺序设置元素的索引,第一个添 ...

  6. ArrayList、Vector、LinkedList的特点和区别

    ArrayList.Vector.LinkedList类均在java.util包中,均为可伸缩数组. 1)ArrayList和Vector都是基于存储元素的Object[] array来实现的,它们会 ...

  7. Java中ArrayList和LinkedList区别

    一般大家都知道ArrayList和LinkedList的大致区别:       1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.       2.对于随机 ...

  8. Java中ArrayList和LinkedList区别 时间复杂度 与空间复杂度

    一般大家都知道ArrayList和LinkedList的大致区别:       1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.       2.对于随机 ...

  9. java中ArrayList和LinkedList的区别

    首先来看ArrayList和LinkedList的集成类和接口的区别.// lang java public class ArrayList<E> extends AbstractList ...

最新文章

  1. UNIX系统编程(2)
  2. Spring Boot——[java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration]解决方案
  3. Spark Streaming(三)zookeepe搭建
  4. QQ聊天文字背影图片拉伸方法
  5. GB28181平台介绍
  6. 菜鸟的学习之路(6) — 设计模式之单例模式(Singleton)
  7. python网盘系统_Python最新全套视频教程百度网盘资源
  8. python3入门与进阶 网盘_python3入门与进阶(二)
  9. Asp.net(C#)年月日时分秒毫秒
  10. Nginx_PHP缓存设置的整理对比
  11. 关于WIN10显示“未安装任何音频输出设备” 英特尔(R)智音系统OED启动错误(代号10)解决办法
  12. mysql报错1194_MYSQL ERROR 1194 (HY000)
  13. Linux指令部分(一)
  14. MySQL数据库安全配置规范操作
  15. “大自然的印钞机”农夫山泉如何借数藏冲破自己的“天花板”?
  16. 一种NET软件加壳技术的设计与实现
  17. C/C++的灵魂—指针实现冒泡排序、选择排序和插入排序
  18. SpringBoot普通参数与基本注解(@PathVariable、@RequestHeader、@RequestParam、@RequestBody)
  19. PS制作水火相溶特效文字图片
  20. SAP_PS常用增强

热门文章

  1. thymeleaf+bootstrap,onclick传参实现模态框中遇到的错误
  2. centos 配置redis
  3. script和href
  4. CUBRID学习笔记 3 net连接数据库并使用cubrid教程示例
  5. 各种 分页存储过程整理
  6. 工作中发现的相对布局中的一个小技巧
  7. 我眼中的Linux设备树(一 概述)
  8. linux间隔时间执行,科技常识:使用linux命令crontab间隔时间执行其它命令
  9. Linux--DHCP
  10. halcon算子翻译——dev_set_paint