Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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 List List=new ArrayList()和List List=new LinkedList()的区别是什么_Java_List_Arraylist_Linked List - Fatal编程技术网

Java List List=new ArrayList()和List List=new LinkedList()的区别是什么

Java List List=new ArrayList()和List List=new LinkedList()的区别是什么,java,list,arraylist,linked-list,Java,List,Arraylist,Linked List,我脑子里有个问题: 有什么区别 1列表=新的ArrayList 2列表=新建链接列表? 无论我以上述两种方式初始化列表,它仍然只能使用列表中的方法,而不能使用ArrayList或LinkedList,不是吗 我从一个网站上读到,它被称为接口编程,开发人员很容易从ArrayList更改为LinkedList,或者将来从ArrayList更改为LinkedList。但是,如果我按照上面所示的方式初始化,就无法使用ArrayList/LinkedList方法,即使可以灵活地更改初始化方式。我相信这是有

我脑子里有个问题: 有什么区别 1列表=新的ArrayList 2列表=新建链接列表? 无论我以上述两种方式初始化列表,它仍然只能使用列表中的方法,而不能使用ArrayList或LinkedList,不是吗


我从一个网站上读到,它被称为接口编程,开发人员很容易从ArrayList更改为LinkedList,或者将来从ArrayList更改为LinkedList。但是,如果我按照上面所示的方式初始化,就无法使用ArrayList/LinkedList方法,即使可以灵活地更改初始化方式。我相信这是有原因的。希望能找到答案。

在这两种情况下,您都创建了一个名为list的变量,其类型为指针

在第一种情况下: 列表=新的ArrayList 您使用类启动了列表变量,该类是的实现,简而言之:

列表接口的可调整大小的数组实现

在第二种情况下: 列表=新建链接列表 您使用类启动了列表变量,该类是的实现,简而言之:

列表和Deque接口的双链表实现

总之,在这两种情况下,您都会得到一个列表,可以根据列表接口定义使用它。主要区别在于:

实现它在性能和内存使用方面有所不同 使用时,每个实现可能包含其他功能 在特定的实现环境中
大致的区别是您应该使用ArrayList,而不应该使用LinkedList。在我20年的Java程序员生涯中,我做过一次后者,现在回想起来,我后悔了。@OleV.V。为什么不应该使用LinkedList?我认为这个问题的措辞令人困惑,但我相信OP是在询问将变量类型声明为List的原因,而不是将变量类型声明为实际的具体实现类(ArrayList或LinkedList)。所以我不觉得这重复了链接的问题。同意@bobulus。标题是误导性的。@IvanKaloyanov你可以,如果你喜欢,但为什么你应该?在性能无关紧要的10种情况中,有9种情况下,你可以掷硬币。如果确实重要,请选择ArrayList。我从未见过LinkedList在时间和空间方面表现更好的案例。即使在中间插入和删除也不例外。