Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.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中列表或ArrayList声明的区别是什么?_Java_List_Arraylist - Fatal编程技术网

Java中列表或ArrayList声明的区别是什么?

Java中列表或ArrayList声明的区别是什么?,java,list,arraylist,Java,List,Arraylist,我是Java新手。 我想知道以下两者之间的区别: List< String > list = new ArrayList<>(); ListList=newarraylist(); 及 ArrayListlist=newarraylist(); 及 ArrayListlist=newarraylist(); 谢谢第一个版本仅在Java7之后有效,与 List<String> list = new ArrayList<String>();

我是Java新手。 我想知道以下两者之间的区别:

List< String > list = new ArrayList<>();
ListList=newarraylist();

ArrayListlist=newarraylist();

ArrayListlist=newarraylist();

谢谢

第一个版本仅在Java7之后有效,与

List<String> list = new ArrayList<String>();
List List=new ArrayList();
只是没那么冗长

第三个相同,相当于

ArrayList<String> list = new ArrayList<String>();
ArrayList list=new ArrayList();
因此严格等同于第二个


出于以下问题答案中提到的原因,您应该选择第一个:

这里有两点需要注意:

1.新的Java 7菱形运算符允许您实例化泛型类,而无需在两侧指定类型参数。所以这两个是等价的:

List<String> list = new ArrayList<>();
ArrayListlist=newarraylist();
ArrayListlist=新建ArrayList();
2.更重要的一点是前两个实例化之间的差异。第二点很清楚:

ArrayList< String > list = new ArrayList<String>();
ArrayListlist=newarraylist();
在第一个例子中:

List< String > list = new ArrayList<>();
ListList=newarraylist();

您使用的事实是,
ArrayList
List
的子类型,因此赋值是有效的。但是,在新的
列表
对象上,您只有包含在
列表
中的方法子集(因为您的对象毕竟声明为
列表
),但实现存在于
ArrayList
中。这在面向对象编程中被称为多态性,允许您使用类的子类型而不是父类(父类是预期的),以便提供各种不同的功能。

这三种功能在某种程度上是等效的:

List<String> list = new ArrayList<>();
在上面,您正在声明一个具体类
ArrayList
的变量,该变量将包含
String
元素,并使用“传统”语法使用具体类
ArrayList
对其进行实例化,该语法要求您在
之间指定
String
类型

ArrayList list=new ArrayList();
在上面,您正在声明一个具体类
ArrayList
的变量,该变量将包含
String
元素,并用具体类
ArrayList
实例化它。另外,您正在使用Java7的新菱形语法,儿子,您不必在
之间再次编写
字符串

请注意,菱形语法(
)仅适用于Java7及以上版本,对于Java的早期版本,您必须使用传统语法(
)来实例化泛型

最后两种形式是完全等价的;第一种形式有点不同,因为您指定
list
变量的类型为
list
,而不是
ArrayList
——这是首选形式,因为良好的面向对象实践要求您应该这样做

List< String > list = new ArrayList<>();
List<String> list = new ArrayList<>();
ArrayList<String> list = new ArrayList<String>();
ArrayList<String> list = new ArrayList<>();