Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于队列和堆栈的Java LinkedList方法_Java_Data Structures_Stack_Queue_Linked List - Fatal编程技术网

用于队列和堆栈的Java LinkedList方法

用于队列和堆栈的Java LinkedList方法,java,data-structures,stack,queue,linked-list,Java,Data Structures,Stack,Queue,Linked List,如果您看一下Java的LinkedList方法,它确实提供了队列、堆栈和Deque的操作 我知道您可以使用LinkedList实现队列、堆栈或Deque。但如果您看一下C#实现,队列和堆栈使用数组 我的好奇是,为什么他们提供了一个链接列表的推(TE)方法 为什么队列和堆栈不像C#那样是独立的类 下面是push和pop的代码,它是duhhh。但是为什么呢 public void push(Object obj) { addFirst(obj); } public Object pop()

如果您看一下Java的LinkedList方法,它确实提供了队列、堆栈和Deque的操作

我知道您可以使用LinkedList实现队列、堆栈或Deque。但如果您看一下C#实现,队列和堆栈使用数组

我的好奇是,为什么他们提供了一个链接列表的推(TE)方法

为什么队列和堆栈不像C#那样是独立的类

下面是push和pop的代码,它是duhhh。但是为什么呢

public void push(Object obj)
{
    addFirst(obj);
}

public Object pop()
{
    return removeFirst();
}
如果您查看HashMap或HashSet,它在内部使用数组,并且相应地有LinkedHashSet和map来保持顺序

这并不是真的让人困惑,但它并没有真正的意义


为什么java有这样的实现

队列是一个接口,除了LinkedList之外还有其他实现。还有一个堆栈类


归根结底,这似乎是一个武断的决定,而底层实现实际上并不重要(IMO)。

队列是一个接口,除了LinkedList之外还有其他实现。还有一个堆栈类


归根结底,这似乎是一个武断的决定,而底层的实现实际上并不重要(IMO)。

关注数据结构实现:


链表对于频繁添加和删除非常有效。(就像队列和堆栈通常做的那样,迭代操作很少)。数组不是,它需要数组复制操作,这非常耗时

侧重于数据结构的实现:


链表对于频繁添加和删除非常有效。(就像队列和堆栈通常做的那样,迭代操作很少)。数组不是,它需要数组复制操作,而数组复制操作非常耗时

像Java的LinkedList这样的双链表是一种非常灵活的数据结构,因此使用它作为基础来实现几种数据结构是有意义的。因此,如果希望将其视为队列,可以这样说(我省略了类型参数):

如果要将其用作堆栈,请按如下方式声明:

Deque s = new LinkedList();

等等。这一切归结为代码重用,毕竟,当一个类(在本例中是LinkedList)就足够了时,为什么要为类似的功能实现几个不同的类呢

双链表(如Java的LinkedList)是一种相当灵活的数据结构,因此使用它作为基础实现多个数据结构是有意义的。因此,如果希望将其视为队列,可以这样说(我省略了类型参数):

如果要将其用作堆栈,请按如下方式声明:

Deque s = new LinkedList();

等等。这一切归结为代码重用,毕竟,当一个类(在本例中是LinkedList)就足够了时,为什么要为类似的功能实现几个不同的类呢

LinkedList
实现了
Queue
接口,因为您可能希望在某些地方将链表用作队列。这意味着将队列作为输入参数的方法也可以处理链表。以下作品

List<String> linkedList = new LinkedList<String>();
linkedList.add("element1");
linkedList.add("element2");

Queue<String> q = (Queue<String>)linkedList; 
q.poll(); //removes and returns element1 from the linkedList
List linkedList=new linkedList();
linkedList.add(“元素1”);
linkedList.add(“element2”);
队列q=(队列)链接列表;
q、 poll()//从linkedList中删除并返回element1

Java有一个单独的类,名为
Java.util.Stack
,它从vector扩展而来,vector是一个基于数组的实现。但这是一个线程安全的版本。如果您不担心线程安全,那么可以使用
ArrayDeque
作为堆栈。

LinkedList
实现
队列
接口,因为您可能希望在某些地方将链接列表用作队列。这意味着将队列作为输入参数的方法也可以处理链表。以下作品

List<String> linkedList = new LinkedList<String>();
linkedList.add("element1");
linkedList.add("element2");

Queue<String> q = (Queue<String>)linkedList; 
q.poll(); //removes and returns element1 from the linkedList
List linkedList=new linkedList();
linkedList.add(“元素1”);
linkedList.add(“element2”);
队列q=(队列)链接列表;
q、 poll()//从linkedList中删除并返回element1

Java有一个单独的类,名为
Java.util.Stack
,它从vector扩展而来,vector是一个基于数组的实现。但这是一个线程安全的版本。如果您不担心线程安全,那么您可以使用
ArrayDeque
作为堆栈。

基本的OOD:而模糊的行、队列、堆栈和Deque大致描述了您可以对集合执行的操作,因此应该是接口。LinkedList描述了接口的实现和性能特征,因此它应该是一个类。该实现可以作为多个接口公开。对我来说,真正的问题是,“为什么堆栈是一个类?”

基本的OOD:而模糊的行、队列、堆栈和Deque大概描述了可以对集合执行的操作,因此应该是接口。LinkedList描述了接口的实现和性能特征,因此它应该是一个类。该实现可以作为多个接口公开。对我来说,真正的问题是,“为什么堆栈是一个类?”

有一个相关的例子。linkedlist需要比数组更多的空间。所以这里有一个折衷方案。c#在内部非常有效地使用数组进行队列和堆栈impl。@user177883:投票!同意。linkedlist需要更多的输入空间。有一个相关的示例。linkedlist需要比数组更多的空间。所以这里有一个折衷方案。c#在内部非常有效地使用数组进行队列和堆栈impl。@user177883:投票!同意。linkedlist需要更多的输入空间。但是,为什么没有像C#那样的具体实现呢?如果我想在内部使用数组而不是链表呢。您正在执行一个cast操作,这是一个计算成本很高的操作。有许多由数组数据存储支持的队列接口的具体实现,如PriorityQueue、ArrayDeque等。当您想要两个世界中最好的一个时,您可以使用链表作为队列(列表