当前位置: 首页 > 知识库问答 >
问题:

LinkedList为同一功能提供了多种方法-为什么?[副本]

颜奇希
2023-03-14

我正在检查Java。util。LinkedList类,并发现LinkedList类提供了几种方法

public void addFirst(E e) 

public boolean offerFirst(E e)

public void push(E e)

所有这3个方法都在列表的头部添加了一个元素。那么为什么不同的实现需要相同的功能呢?

是因为推是为了斯塔克和

offerFirst–退出队列

addFirst-LinkedList

还是一些其他的基本面?

请在这里分享一些见解。谢谢

共有2个答案

吴建中
2023-03-14

花点时间看看java文档。。

public void addFirst(E e) 
// Inserts the specified element at the beginning of this list.

public boolean offerFirst(E e)
// Inserts the specified element at the front of this list.

public void push(E e)
// Pushes an element onto the stack represented by this list.

更多信息: LinkedList

贝镜
2023-03-14

这些都是在LinkedList中实现的,由于Deque接口的契约。

和javadocs为Deque清楚地解释了区别:

无效地址优先(E)

在此deque的前面插入指定的元素,如果可以在不违反容量限制的情况下立即插入。当使用容量受限的deque时,通常优选使用方法offerFirst(E)。

布尔offerFirst(E)

在此数据块的前面插入指定的元素,除非它违反容量限制。当使用容量受限的deque时,此方法通常比addFirst(E)方法更可取,后者只能通过抛出异常才能插入元素。

ArrayBlockingQueue类(javadocs)是实现Deque的有界队列实现的一个示例。

 类似资料:
  • 问题内容: 查看Guava的ImmutableList(和其他一些类),您会发现很多重载的便捷方法(“按顺序返回包含给定元素的不可变列表”。)这些方法使用不同数量的参数: 一直到这一步: 我的一些同事认为这很愚蠢,想知道为什么不只有一种方法:。他们怀疑这是不正确的性能“优化”,属于“您认为自己比编译器更聪明”之类的东西。 我的直觉是Kevin Bourrillion等。出于真正的原因将这些方法放在

  • 问题内容: 有人知道为什么JUnit 4提供但不提供方法吗? 它提供了(对应于)和(对应于),因此它们似乎没有包含在内就显得很奇怪。 顺便说一下,我知道JUnit插件提供了我正在寻找的方法。我只是出于好奇而问。 问题答案: 我建议您使用较新的样式断言,该断言可以轻松描述各种否定形式,并在断言失败时自动构建对您的期望和得到的结果的描述: 这三个选项都是等效的,请选择最容易阅读的一个。 要使用方法的简

  • 我很想知道为什么Java的可选不提供类似于流的方法。 接口的method javadoc声明: @apiNote此方法主要用于支持调试,您希望在元素流经管道中的某个点时看到这些元素 这几乎完全描述了我的用例: (返回 方法,上述所有内容都会转换为: 也可以这样做(参见此答案): 并将其与方法一起使用: 但我认为这是一个黑客,而不是的干净用法。 从Java 9开始,可以将< code>Optiona

  • 我正在尝试反序列化两种类型的json: 和 进入这些对象: 第一种方法创建两个新对象,第二种方法基于字符串的内容从数据库请求对象。 有点像杰克逊映射器如何将任意字符串反序列化为对象,对于这样的对象: 问题是我两者都需要。我需要它来处理对象和字符串。两者都可以从同一个输入到达。 我尝试的第一个想法是制造一个转换器 它说这些创建一个委托类型来传递给反序列化器,但是即使数据类型不是字符串,转换器也总是被

  • 问题内容: 如果我有要排序的元素列表,那么Java提供了两种解决方法。 例如,假设我有一个电影对象列表,我想按标题对它们进行排序。 我可以执行此操作的一种方法是通过将电影列表作为单个参数调用静态java.util.Collections.sort()方法的一个参数版本。因此,我将其称为Collections.sort(myMovieList)。为了使它起作用,必须声明Movie类以实现java.l

  • 问题内容: 根据JAVA文档,当调用super.clone()时,将返回对象的浅表副本。在下面的代码中,我有两个对象 name 和 id ;和一个基本变量 num 。当在第一个对象上调用super.clone()方法时,除了预期的num副本外,它似乎还在创建对象的深层副本(名称和ID)。克隆对象obj之后,我更改了它的名称和id字段。如果正在制作浅表副本,则这些更改应反映在克隆的对象中。我对吗?