我正在查看LinkedList
的Java 8文档,我看到几个方法似乎也在做同样的事情。例如:
- 添加(E E(:将指定的元素追加到此列表的末尾
- addLast(E E(:将指定的元素追加到此列表的末尾
- 报价(E E(:添加指定的元素作为此列表的尾部(最后一个元素(
这三个似乎都在做同样的事情。我看到add
和offer
都返回布尔值,表示修改是否成功。
add
的文档甚至说它与addLast
相同,尽管它没有返回任何内容。我想我想知道为什么这么多冗余?我什么时候会选一个而不是另一个?
LinkedList
实现了几个接口:
add
来自List
和Queue
接口,后者从Collection
得到offer
来自Queue
接口,与add
方法的不同之处在于它在失败时的作用(在Javadoc中的表中描述(addLast
来自Deque
接口。Deque
也是Collection
,add
方法也是;也许addLast
是为了与addFirst
方法保持清晰和对称,所以您不会对add
添加到哪一端产生任何疑问。正如Javadoc中所描述的,Deque.addLast
和Queue.add
是等效的
你应该选择哪一个:这取决于你,因为他们做的是相同的事情(给予或接受返回类型(。
更大的问题是:为什么LinkedList
试图做这么多事情(不是很单一的责任原则,是吗?(;你应该用它吗?
推特上有一个帖子,java.util.LinkedList
的作者Josh Bloch质疑它是否真的有用。他建议你最好使用ArrayList
或ArrayDeque
,具体取决于你需要它做什么