【问题标题】:what is the difference between arraylist with and without <> operator带和不带 <> 运算符的arraylist 有什么区别
【发布时间】:2015-01-20 09:00:51
【问题描述】:

我在 SCJP 上进行模拟测试。我遇到了两个不同的问题,其陈述为

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

ArrayList arr = new ArrayList();

1) 这两者有什么区别?

My Analysis=> 首先可以存储 Integer 及其子类。第二个可以存储 Object 及其子类。

2) 我们可以在没有任何泛型类的 的情况下创建对象吗?

【问题讨论】:

标签: java arraylist generic-collections


【解决方案1】:

1) 这两者有什么区别?

您自己已经找到了答案。建议你深入Java documentation了解详情...

2) 我们可以在没有任何泛型类的 的情况下创建对象吗?

IMO,您应该始终使用第一种方法:

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

或更好

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

因为您让读者清楚您打算在 ArrayList 中放入什么。

【讨论】:

    【解决方案2】:

    1) 这两者有什么区别?
    ArrayList&lt;Integer&gt; arr = new ArrayList&lt;Integer&gt;();这个列表存放的是Integer类对象。

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

    2)我们可以在没有任何泛型类的的情况下创建对象吗?

    &lt;&gt;Java 5引入的泛型
    泛型通过产生更多错误来增加代码的稳定性 在编译时可检测到。

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

    所以,最好使用泛型,Read more about Generics

    【讨论】:

      【解决方案3】:

      简短回答:没有 的ArrayList 基本上等同于ArrayList&lt;?&gt;,这意味着在编译时不知道列表内容的类型。

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

      使用泛型(带有 )版本的好处是编译器可以进行一些静态类型检查,以确保您的代码至少在类型级别上是正确的。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-06-10
        • 1970-01-01
        • 2018-08-16
        • 2012-10-10
        • 2010-11-15
        • 2020-06-13
        • 1970-01-01
        • 2011-02-12
        相关资源
        最近更新 更多