List 是一个接口,不能实例化,通过实例化ArrayList 或者LinkedList来调用:List list = new ArrayList();

|--List: 元素是有序的(怎么存的就怎么取出来,顺序不会乱),元素可以重复(角标1上有个3,角标2上也可以有个3)因为该集合体系有索引,
|-- ArrayList:底层的数据结构使用的是数组结构(数组长度是可变的百分之五十延长)(特点是查询很快,但增删较慢)线程不同步
|-- LinkedList:底层的数据结构是链表结构(特点是查询较慢,增删较快)
|-- Vector:底层是数组数据结构 线程同步(数组长度是可变的百分之百延长)(无论查询还是增删都很慢,被ArrayList替代了)

List 接口下的方法有:

  • boolean add(int index, E element)
  • boolean addAll(index, collection)
  • boolean remove(int index)
  • set(int index, E element)   //修改指定角标的元素,返回修改的元素
  • get( int index) //返回列表中指定位置的元素
  • subList(int fromIndex, int toIndex) 返回指定范围间(fromIndex(包括)  toIndex(不包括))的元素

Queue接口与List、Set同一级别,都是继承了Collection接口。

LinkedList实现了Queue接口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。

BlockingQueue 继承了Queue接口。

队列是一种数据结构.它有两个基本操作:在队列尾部加人一个元素,和从队列头部移除一个元素就是说,队列以一种先进先出的方式管理数据,如果你试图向一个 已经满了的阻塞队列中添加一个元素或者是从一个空的阻塞队列中移除一个元索,将导致线程阻塞.在多线程进行合作时,阻塞队列是很有用的工具。工作者线程可 以定期地把中间结果存到阻塞队列中而其他工作者线线程把中间结果取出并在将来修改它们。队列会自动平衡负载。如果第一个线程集运行得比第二个慢,则第二个 线程集在等待结果时就会阻塞。如果第一个线程集运行得快,那么它将等待第二个线程集赶上来。下表显示了jdk1.5中的阻塞队列的操作:

  • add        增加一个元索                     如果队列已满,则抛出一个IIIegaISlabEepeplian异常
  • remove   移除并返回队列头部的元素    如果队列为空,则抛出一个NoSuchElementException异常
  • element  返回队列头部的元素             如果队列为空,则抛出一个NoSuchElementException异常
  • offer       添加一个元素并返回true       如果队列已满,则返回false
  • poll         移除并返问队列头部的元素    如果队列为空,则返回null
  • peek       返回队列头部的元素             如果队列为空,则返回null
  • put         添加一个元素                      如果队列满,则阻塞
  • take        移除并返回队列头部的元素     如果队列为空,则阻塞

LinkedList 继承 List 接口(特有方法):

  •   addFirst();  在头部添加元素  addLast();在尾部添加元素
  •   getFirst(); getLast();  获取元素但不删除
  •   removeFirst(); removeLast();  获取并且删除  
  •   jkd1.6中出现了替代方法  
  •   offerFirst(); offerLast();
  •   peekFirst(); peekLast(); 获取元素,但是元素不被删除。如果集合中没有元素,会返回null
  •   pollFirst(); pollLast(); 获取元素,但是元素被删除。如果集合中没有元素,会返回null

ArrayList 继承 List 接口(特有方法):

  •   Count属性 记录当前列表的元素个数
  •   Capacity属性 记录能包含的最大数量,可改
  •   Add方法用于添加一个元素到当前列表的末尾
  •   AddRange方法用于添加一批元素到当前列表的末尾
  •   Remove方法用于删除一个元素,通过元素本身的引用来删除
  •   RemoveAt方法用于删除一个元素,通过索引值来删除
  •   RemoveRange用于删除一批元素,通过指定开始的索引和删除的数量来删除
  •   Insert用于添加一个元素到指定位置,列表后面的元素依次往后移动
  •   InsertRange用于从指定位置开始添加一批元素,列表后面的元素依次往后移动

另外,还有几个类似的方法:

  •   Clear方法用于清除现有所有的元素
  •   Contains方法用来查找某个对象在不在列表之中

Queue 与List、LinkedList与 ArrayList 区别的更多相关文章

  1. 浅谈Java中linkedlist和arraylist区别

    在Java中,关于集合框架有这样一个体系结构: 其主要由两个接口派生而出:Collection和Map,然后再衍生出各自的一些实现类(比如Collection接口又被继承与Set和List接口,而他们 ...

  2. List、LinkedList、ArrayList、Vector

    目前好像写不出比较高质量的随笔,除了多看看别人写的,就是多写,做好自己可以做的 最近听的和看到的最多的一个词就是“勿忘初心”.的确不少人到了一定高度之后,就不知道该怎么做了.(包括我曾经的偶像娜姐,在 ...

  3. Java ArrayList和Vector、LinkedList与ArrayList、数组(Array)和列表集合(ArrayList)的区别

    ArrayList和Vector的区别ArrayList与Vector主要从二方面来说.  一.同步性:   Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步 ...

  4. LinkedList和ArrayList的区别/何时使用LinkedList和ArrayList

    1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList ...

  5. Hashtable,HashMap,TreeMap有什么区别?Vector,ArrayList,LinkedList有什么区别?int和Integer有什么区别?

    接着上篇继续更新. /*请尊重作者劳动成果,转载请标明原文链接:*/ /*https://www.cnblogs.com/jpcflyer/p/10759447.html* / 题目一:Hashtab ...

  6. LinkedList、ArrayList、Vector三者的关系与区别?

    LinkedList.ArrayList.Vector三者的关系与区别? 区分ArrayList,Vector,LinkedList的区别 ArrayList,Vector的区别: 1.出现版本:Ar ...

  7. LinkedList和ArrayList的区别

    LinkedeList和ArrayList都实现了List接口,但是它们的工作原理却不一样.它们之间最主要的区别在于ArrayList是可改变大小的数组,而LinkedList是双向链接串列(doub ...

  8. LinkedList与ArrayList的区别

    我们都知道LinkedList和ArrayList相比: 1.LinkedList插入删除相对较快,而查询较慢: 2.ArrayList插入删除相对较慢,而查询很快(详细可查看从源码的角度分析List ...

  9. Java 中 LinkedList 和 ArrayList 的区别

    引自:https://www.cnblogs.com/huzi007/p/5550440.html ArrayList和LinkedList的大致区别如下:1.ArrayList是实现了基于动态数组的 ...

随机推荐

  1. Hadoop多节点Cluster

    Hadoop多节点集群规划 服务起名称 内网IP HDFS YARN master 192.168.1.155 NameNode ResourceManager slave1 192.168.1.11 ...

  2. HDU_1269_tarjan求强连通分量

    迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  3. 说说web缓存-强缓存、协商缓存

    网上关于WEB缓存的文章很多,今天汇总一下. 为什么要用缓存 一般针对静态资源如CSS,JS,图片等使用缓存,原因如下: 请求更快:通过将内容缓存在本地浏览器或距离最近的缓存服务器(如CDN),在不影 ...

  4. https://blog.csdn.net/cddcj/article/details/52193932

    https://blog.csdn.net/cddcj/article/details/52193932 兼容性

  5. List集合的特有功能概述和测试

    List集合的特有功能概述和测试A:List集合的特有功能概述void add(int index,E element)E remove(int index)E get(int index)E set ...

  6. PAT_A1013#Battle Over Cities

    Source: PAT A1013 Battle Over Cities (25 分) Description: It is vitally important to have all the cit ...

  7. 11.5 【Linq 】连接

    11.5.1 使用 join 子句的内连接 如果你打算把一个巨大的序列连接到一个极小的序列上,应尽可能把小序列作为右边序列 class Program { static void Main(strin ...

  8. 【VIP视频网站项目二】搭建爱奇艺优酷腾讯视频官网首页轮播图效果及实现原理分析

    这个是实现的效果,基本上轮播效果和主流网站的一致,但是我也在上面优化了一些效果, 可以在线预览效果:https://vip.52tech.tech/ 目前项目代码已经全部开源:项目地址:https:/ ...

  9. 原生js封装ajax,深入理解$.ajax()

    直接上代码 //封装的ajax函数 // 传一个对象,所有要用的参数都在对象中 因为不写对象 实参列表个数太多,所以像jq一样,调用ajax也是把对象当实际参数传进去 // type 请求方式 默认g ...

  10. jQuery cxCalendar 日期选择器

    简介 cxCalendar 是基于 jQuery 的日期选择器插件. 它灵活自由,你可以自定义外观,日期的范围,返回的格式等. 版本: jQuery v1.7+ jQuery cxCalendar v ...