Java ArrayList的Propper初始化

Java ArrayList的Propper初始化,java,Java,我总是这样初始化我的ArrayList: List<Integer> list = new ArrayList<Integer>(); List<Integer> list = new ArrayList<>(); List List=new ArrayList(); 但是根据我的IDE,新ArrayList之后的部分应该是空的,如下所示: List<Integer> list = new ArrayList<Integer

我总是这样初始化我的ArrayList:

List<Integer> list = new ArrayList<Integer>();
List<Integer> list = new ArrayList<>();
List List=new ArrayList();
但是根据我的IDE,新ArrayList之后的部分应该是空的,如下所示:

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

正确的方法是什么?

两者都是正确的,它们做的事情完全相同。第二种方法是在Java7中引入的。它叫做

只要编译器可以从上下文推断类型参数,就可以用一组空的类型参数()替换调用泛型类的构造函数所需的类型参数。这对尖括号非正式地称为菱形


第二种是类型推断。如果编译器能够从上下文推断类型参数,那么在调用构造函数时可以使用空的类型参数集

即使第一个也是正确的,但是对于第二个,您必须编写更少的代码


有关详细信息:

为什么会这样?@Polarbear0106,因为您不需要编写两次类型。@Polarbear0106,因为如果您有一个复杂的类型列表
List@L01c:不太一样,在
=new ArrayList()
=new ArrayList()
之间有区别(这个问题问的是什么).更新问题@L01c@T.J.Crowder这个问题不涉及
=newarraylist()
。(由于OP盲目地复制了你的评论,编辑现在包含了这一点)@Tom:“但是在Java 5/6中,我可以简单地写:
List=new LinkedList();
”@Tom:是的,它来自L01c链接的问题。这不是你说的吗?