对于集合,我们什么时候更喜欢使用对象类型,什么时候使用原始类型

For collections, when do we prefer using Object type , and when do I use primitive type

例如

ArrayList<int> al = new Arraylist<int>();

ArraList<Integer> al = new ArrayList<Ingeter>();

此外, 我见过这样的代码:

ArrayList al = new ArrayList();
System.out.println("Initial size of al: " + al.size());

// add elements to the array list
al.add("C");

ArrayList 声明中省略了类型。这是一个好习惯吗?

我是否应该始终显式声明类型,或者这是 Java 尽可能省略某些内容的惯例?

在使用 java 5+

时应始终使用类型

ArraList<Integer> al = new ArrayList<Ingeter>();

不编译

ArrayList<int> al = new Arraylist<int>();

仅适用于旧 java 版本。

ArrayList al = new ArrayList();

你有点跳进了未来。 :-)

目前,集合上的基元(通常,基元类型上的泛型)是不允许的,语句 ArrayList<int> al = new Arraylist<int>(); 将无法编译。

这是引入包装器类型(如 IntegerDouble 等)的原因之一。有了它们,我们就可以在集合中存储数值(和 boolean 包裹在 Boolean 中)值。

据我所知,Generics over Primitive Types 功能计划在下一个平台版本中引入(最有可能在 JDK10 中,但时间会告诉我们是否会放弃或实现) .

在处理泛型时使用原始类型不是好的约定。 同样正如其他张贴者所说,不可能将原始类型用作通用类型。

ArrayList<int> al = new Arraylist<int>();

不会编译。您必须使用整数框 class

在 java1.5 之前你可以创建没有泛型的 ArrayList.. 就像

ArrayList a= new ArrayList();

这意味着您的数组列表可以包含任何对象。由于 Object class 是所有 class 的超class,您可以将任何 Object 插入其中。 但它有一个缺点。当你使用 get() 方法时,你必须将 Object 转换回来。

在 Java 1.5 及更高版本中,您可以为特定类型创建和 ArrayList

ArrayList<type> obj= new ArrayList<type>();

这确保了确定的类型保证,并且您不必在从列表中获取对象时转换对象。

使用 Java 1.5 的合集 您可以存储 ObjectObject 的子 class。您不能存储像 int 这样的基元类型。 因此,为了将 int 存储在 ArrayList 中,您必须在定义 ArrayList.

时使用相应的包装器 class

Java 会自动将 int 转换为 IntegerInteger 转换为 int 并使用一种名为 autoboxing/outboxing 的机制。