有和没有<>的arraylist有什么区别?操作者

时间:2015-01-20 09:00:52

标签: java arraylist generic-collections

我对SCJP进行模拟测试。我遇到两个不同的问题,声明为

ArrayList<Integer> arr = new ArrayList<Integer>();

ArrayList arr = new ArrayList();

1)这两者之间的差异是什么?

我的分析=&gt; 首先可以存储Integerand及其子类。第二个可以存储Object及其子类。

2)我们可以在没有&lt;&gt;的情况下制作对象任何泛型类?

3 个答案:

答案 0 :(得分:2)

  

1)这两者之间的差异是什么?

你已经找到了自己的答案。我建议你深入Java documentation寻找细节......

  

2)我们可以在没有&lt;&gt;的情况下制作对象任何泛型类?

IMO,你应该总是使用第一种方法:

ArrayList<Integer> arr = new ArrayList<Integer>();

或更好

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

因为你向读者提出了清除你打算放入ArrayList的内容。

答案 1 :(得分:0)

1)这两者之间的差异是什么?
ArrayList<Integer> arr = new ArrayList<Integer>();此列表存储整数类对象。

ArrayList arr = new ArrayList(); - 此列表是通用列表,它将存储所有类型的对象。

2)我们可以在没有&lt;&gt;的情况下制作对象任何通用类?

  

<>是由Java 5引入的泛型   泛型通过制造更多错误来增加代码的稳定性   在编译时可检测到。

当您在集合中添加对象时,如果您不知道集合所采用的对象类型,则它会变得容易出错。以及您必须从该集合中检索哪种类型的对象。

因此,使用泛型Read more about Generics

会更好

答案 2 :(得分:0)

简短回答:ArrayList没有&lt;&gt;基本上等同于ArrayList<?>,这意味着List的内容类型在编译时是未知的。

由于运行时类型擦除,通用版本和非通用版本之间没有区别:它们只是包含对象的列表。

使用通用(带&lt;&gt;)版本获得的是编译器可以执行一些静态类型检查,确保您的代码至少在类型级别是正确的。

根据你的第二个问题,是的。您可以创建任何泛型类的非泛型版本,尽管这对于代码的清晰度和安全性通常都是一种不好的做法。