Java中列表或ArrayList声明的区别是什么?
我是Java新手。 我想知道以下两者之间的区别: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>();
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<>();