先说一说以下概念:
队列:先进先出 如同一个水瓶。
堆栈:先进后出 如同一个管道。
public interface Deque<E> extends Queue<E>
一个线性 collection,支持在两端插入和移除元素。名称 deque 是“double ended queue(双端队列)”的缩写,通常读为“deck”。大多数 Deque 实现对于它们能够包含的元素数没有固定限制,但此接口既支持有容量限制的双端队列,也支持没有固定大小限制的双端队列。
此接口定义在双端队列两端访问元素的方法。提供插入、移除和检查元素的方法。每种方法都存在两种形式:一种形式在操作失败时抛出异常,另一种形式返回一个特殊值(null 或 false,具体取决于操作)。插入操作的后一种形式是专为使用有容量限制的 Deque 实现设计的;在大多数实现中,插入操作不能失败。
下表总结了上述 12 种方法:
第一个元素(头部)
最后一个元素(尾部)
抛出异常
特殊值
抛出异常
特殊值插入
addFirst(e)
offerFirst(e)
addLast(e)
offerLast(e)移除
removeFirst()
pollFirst()
removeLast()
pollLast()检查
getFirst()
peekFirst()
getLast()
peekLast()
此接口扩展了 Queue 接口。在将双端队列用作队列时,将得到 FIFO(先进先出)行为。将元素添加到双端队列的末尾,从双端队列的开头移除元素。从 Queue 接口继承的方法完全等效于 Deque 方法,如下表所示:
Queue 方法等效 Deque 方法add(e)
addLast(e)offer(e)
offerLast(e)remove()
removeFirst()poll()
pollFirst()element()
getFirst()peek()
peekFirst()
双端队列也可用作 LIFO(后进先出)堆栈。应优先使用此接口而不是遗留 Stack 类。在将双端队列用作堆栈时,元素被推入双端队列的开头并从双端队列开头弹出。堆栈方法完全等效于 Deque 方法,如下表所示:
堆栈方法等效 Deque 方法push(e)
addFirst(e)pop()
removeFirst()peek()
peekFirst()
ArrayList:数组数据结构,线程不同步,查询速度快。增删稍慢,需要数组的增容。
LinkedList:链表结构,线程不同步,增删速度快。此类实现 Deque 接口,为 add、poll 提供先进先出队列操作,以及其他堆栈和双端队列操作。所有操作都是按照双重链接列表的需要执行的。在列表中编索引的操作将从开头或结尾遍历列表(从靠近指定索引的一端)。
注意,此实现不是同步的。如果多个线程同时访问一个链接列表,而其中至少一个线程从结构上修改了该列表,则它必须
保持外部同步。(结构修改指添加或删除一个或多个元素的任何操作;仅设置元素的值不是结构修改。)这一般通过对自然封装该列表的对象进行同步操作来完成。如果不存在这样的对象,则应该使用
Collections.synchronizedList
方法来“包装”该列表。最好在创建时完成这一操作,以防止对列表进行意外的不同步访问,如下所示:List list = Collections.sychronizedList(new LinkList(……)); 特方法 addFirst():指定元素插入此列表的开头。addLast():指定元素添加到此列表的结尾。 getFirst():返回此列表的第一个元素。getLast() :返回此列表的最后一个元素。removeFrist():removeLast():Vector:数组数据结构,线程同步,查询增删效率低。数组数据结构,线程同步,查询增删效率低。
Vector超过它的容量大小时,随着容量增大而翻倍,而ArrayList只增加50%的大小,这样,ArrayList也有利于节约内存空间。
相关推荐
ArrayList LinkedList Vector 区别 ArrayList、LinkedList、Vector 是 Java 中常用的数据结构实现类,它们都实现了 List 接口,但它们在存储方式、性能、线程安全性等方面有着不同特点。 首先,ArrayList 和 ...
在Java编程语言中,ArrayList、LinkedList和Vector是三种常见的动态数组实现,它们都在java.util包中,用于存储和管理对象的集合。这三个类都实现了List接口,提供了多种操作方法,但它们在内部实现和性能特性上有所...
ArrayList、LinkedList和Vector是三种常见的动态数组实现,它们各自有特定的特性和使用场景。这里我们将深入探讨这三个类的性能对比,以及它们在不同操作下的表现。 ArrayList是基于动态数组实现的,它提供了随机...
ArrayList、Vector、LinkedList 的区别 在 Java 集合框架中,ArrayList、Vector、LinkedList 是三个常用的 List 实现类,虽然它们都实现了 List 接口,但是它们在继承关系、实现接口、底层数据结构、扩容机制等方面...
### ArrayList、Vector、LinkedList 的区别与用法详解 在Java编程中,选择合适的数据结构对于程序的性能至关重要。本文将深入探讨ArrayList、Vector和LinkedList三种集合类的特点与使用场景,帮助开发者更好地理解...
在Java编程语言中,ArrayList、Vector和LinkedList是三种常见的动态数组实现,它们都属于集合框架中的List接口。这里我们将深入探讨这三种数据结构的源码,理解它们的内部实现、性能特性和适用场景。 首先,...
【ArrayList、LinkedList、Vector对比分析】 1. **List概述** List接口是Java集合框架中的重要组成部分,它是一个有序的集合,允许重复元素,并且保持插入顺序。List接口的实现类主要有ArrayList、LinkedList和...
Java容器集合(equals和hashCode+基础数据结构+ArrayList+Vector和LinkedList) Java容器集合是Java中的一种基础数据结构,用于存储和管理数据。其中,equals和hashCode方法是Java容器集合中两个非常重要的方法,...
今天,我们将深入了解 Java 中的集合类别,包括 ArrayList、Vector、LinkedList 和 Map 等。 ArrayList ArrayList 是一种基于数组的集合类别,它可以存储大量的数据。ArrayList 的特点是:它可以动态地增加或减少...
List的实现类有很多,例如ArrayList、Vector、LinkedList等。ArrayList和Vector都是基于数组的实现,LinkedList是基于链表的实现。ArrayList和Vector的主要区别在于Vector使用了synchronized方法,线程安全,而...
ArrayList和LinkedList是两种常用的List实现类。ArrayList实现了可变大小的数组,它允许所有元素,包括null。ArrayList没有同步。size、isEmpty、get、set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个...
### Vector vs ArrayList #### 区别 - **线程安全性**:`Vector` 是线程安全的,而 `ArrayList` 不是。`Vector` 中的大部分方法都是同步的,可以在不加额外同步措施的情况下用于多线程环境。 - **性能**:由于 `...
在Java集合框架中,Vector、ArrayList和LinkedList都是List接口的实现,它们提供了有序集合的功能,允许根据位置进行元素的添加、删除和查找。然而,它们在设计和性能上有着显著的区别。 首先,Vector是Java早期...
在选择LinkedList、ArrayList和Vector时,需要考虑以下几个因素: * 是否需要线程安全:如果需要线程安全,选择Vector;否则,选择ArrayList或LinkedList。 * 是否需要快速插入数据:如果需要快速插入数据,选择...
在Java编程语言中,`ArrayList`、`LinkedList`、`Vector`和`Map`是四种常用的集合类,它们各自有着不同的特性和用途。本篇文章将深入探讨这些数据结构及其使用场景。 首先,我们来了解`ArrayList`。`ArrayList`是`...
在Java集合框架中,Vector、ArrayList和LinkedList是三种常见的List接口实现类,它们各自具有不同的特点和适用场景。下面我们将详细对比这三个类的区别。 1. **Vector** - **线程安全**:Vector是线程安全的,因为...
Java基础之集合List-ArrayList、LinkedList、Vector的底层实现和区别ArrayList底层实际是采用数组实现的(并且该数组的类型是
Vector与ArrayList类似,但它提供了一种线程安全的实现,这意味着在多线程环境中,多个线程可以同时访问和修改Vector,而不会导致数据不一致。然而,由于其同步机制,Vector的性能通常低于ArrayList。 3. Map接口与...
能学到什么:ArrayList的源码分析,自动扩容和自动缩容的源码分析,相关参数的深度解析,从是什么,为什么,怎么做三个角度进行讲解,用通俗易懂的白话进行介绍,LinkedList和Vector以及ArrayList的区别以及使用场景...
为什么ArrayList,Vector等都不支持循环中remove1 ...其实,在Vector,ArrayList,LinkedList中,删除有两种方式进行删除: 1.循环中删除 2.直接删除 1 Vector 直接删除 直接删除首先调用indexOf方法,得到目标元素