Java 对集合调用addFirst

Java 对集合调用addFirst,java,collections,Java,Collections,是否有方法调用col.addFirst?是,如果您强制转换到LinkedList: 但这是不鼓励的,因为您并不总是知道集合的具体类型。您可以使用instanceof进行检查,但这不是好的面向对象代码。如果你真的需要一个链接表,需要一个链接列表而不是集合如果你声明一个变量作为集合,这意味着你通常计划把这个变量作为程序的一个简单的集合,而不是一个链表。集合接口提供的方法对于使用此变量的程序的其余部分应该足够了 如果您需要访问仅存在于LinkedList类中的特定方法,则该变量应声明为LinkedLi

是否有方法调用col.addFirst?

是,如果您强制转换到LinkedList:


但这是不鼓励的,因为您并不总是知道集合的具体类型。您可以使用instanceof进行检查,但这不是好的面向对象代码。如果你真的需要一个链接表,需要一个链接列表而不是集合

如果你声明一个变量作为集合,这意味着你通常计划把这个变量作为程序的一个简单的集合,而不是一个链表。集合接口提供的方法对于使用此变量的程序的其余部分应该足够了


如果您需要访问仅存在于LinkedList类中的特定方法,则该变量应声明为LinkedList

我不知道为什么在这种情况下需要使用Collection,但是如果使用java.util.Deque接口,您仍然可以编程到接口而不是实现,该接口碰巧也扩展了java.util.Collection


如果使用列表而不是集合,则.add方法可用。在索引0处添加以将其放在第一个位置

Deque<String> deque = new LinkedList<String>();
deque.addFirst("Hello");
Collection<String> collection = deque;

不鼓励,但在这种情况下确实是必要的,因为即使是列表也没有addFirst,只有LinkedList有。是的,有时是必要的-如果有太多的先决条件,你就是不能改变设计,我同意Daniel的观点-应该不鼓励。如果必须首先调用add,则应使用LinkedList类型作为col1。
((LinkedList) col).addFirst(..)
Deque<String> deque = new LinkedList<String>();
deque.addFirst("Hello");
Collection<String> collection = deque;
list.add(0, object)