2015-10-12 43 views
-4

我有一些关于ArrayArrayList的问题。我在这里搜索,找不到我正在寻找的答案。Array和ArrayList

  1. 我明白ArraysArrayListjava.util一部分。所以当我创建和ArrayArrayList我创建对象和实例?

  2. 为什么必须导入java.util.ArraList才能创建一个ArrayList对象,但是不需要导入java.util.Arrays来创建和Array对象?

  3. 为什么Array的方法调用方式与ArrayList不同?是否因为Arrays类的方法都是静态的?

  4. 为什么说使用和阵列的性能比使用ArrayList的性能要快?

  5. 我知道要迭代数组中的值,可以使用for循环。如何迭代ArrayList中的值 - 我知道也可以使用for循环,但在互联网中,据说我可以使用迭代器,这个迭代器是什么?

  6. 如果数组存储对象,数组可以是多维的吗?

  7. 如果我正在处理原始数据,那么我明白它们应该全部存储在一个数组中,因为ArrayList不能包含原始数据类型。但是,如果我只用对象工作,我应该选择使用Array还是ArrayList

+0

很确定这里有很多答案。 –

+0

作为第一个提示:'java.util.Arrays'只是一个处理_real_数组的util类。这个类不是一个数组。 – Tom

+2

你正在'阵列'与'阵列'混淆。 –

回答

1

是的,当你创建一个数组或ArrayList你正在创建一个实例/对象。

包类似于包含类定义的目录(例如java.util包包含ArrayList类)。包中的所有类都有唯一的名称。但类名可以在其他包中使用。所以,实际上有超过1个ArrayList类可能。 所以,这就是为什么的java编译器总是需要知道类的全名。

因此,当您创建ArrayList时,您希望编译器知道您正在创建java.util.ArrayList。其实你可以指定你的对象创建期间:

java.util.ArrayList list = new java.util.ArrayList(); 

但是,这真的详细。很烦人,你不得不一直重复这个全名。这就是import陈述的目的。 通过指定import java.util.ArrayList,您告诉编译器,所有对ArrayList的引用实际上都是java.util.ArrayList类型。

数组是非常特殊的类。它们不是原语,但是在Java虚拟机和编译器的底层有很多事情发生。老实说,我不想对此解释太多,因为这会让你感到困惑。

但总之,java为每种类型的数组使用专用类。所以,有一个int[]类,一类long[],一个Object[]类等

老实说阵列的性能并不比一个ArrayList的更好。两者都有其优点。

Iterator是之前发明的,每次迭代都是在java中引入的。您只能对实现Iterable接口的集合使用迭代器。 (同样,不是数组的情况)。迭代器的一个优点是,您可以在迭代时从列表中删除对象(即使用iterator.remove()方法)

当然,即使存储对象,数组也可以是多维的。而且ArrayList不能包含原始类型

我通常宁愿使用ArrayListArrayList的主要优点之一是,它在超出容量时会自动调整大小。数组并非如此。

另一方面,如果您知道列表的确切长度,那么数组将使用更少的内存。

刚刚完成:还有一个Arrays类,它包含数组实例中缺少的便捷方法。事实上,这些方法是严格的静态方法。

+0

也非常好的答案!谢谢! – Consuela

0

在最简单的方式,挥手过去的细节:

阵列(注意小的名称)的大小是固定聚合类型;它不是可以归类的东西。 ArrayList是Collections框架的一部分。查看Javadocs了解该系列产品的详细信息。

java.util.Arrays是一个便利的类,提供了静态有用的操作数组的方法。由于它们是静态的,因此不需要或允许直接实例化。

您的其他问题需要调整,一旦你通过这些基本面。

+0

啊我现在看到了。你可以理解我真正的疑惑,并指向正确的方向。我可以看到你很有知识! :-)。再见。 – Consuela

0
  1. ArrayList是Java集合库中可用的集合之一。您创建一个ArrayList对象,它允许您管理一系列项目。另一方面,Arrays是对数组进行操作的实用函数的集合。您可以通过执行类似new int[10]的操作来创建新阵列。

  2. 您构建了一个ArrayListnew ArrayList(),因此您必须导入它。 Arrays类与创建数组无关,因此不是必需的。

  3. ArraysArrayList是完全不同的。一个只是一个函数集合(它们不是数组的方法),您不能创建Arrays的实例。 ArrayList的方法直接在ArrayList上操作。

  4. 数组提供对数组存储的直接访问并保存任何类型的值(基元和对象引用),而ArrayList范只保存对象引用。对于对象引用,没有真正的速度差异,但对于基元,必须将这些值放入或取出对象“框”,该对象显着较慢。

  5. 迭代器是它实现了一个集的穿越,让你的下一个项目(next),并允许你要问,如果有以最有效的方式的话(hasNext)可能收集的类型的对象。迭代器也用于循环,但更安全,因为您不必自己管理索引。

  6. 是的。一个ArrayList也是一个对象,所以多维ArrayList只是一个ArrayList它拥有ArrayList s。如果使用对象数组,请始终使用ArrayList。处理起来要容易得多(例如,如果您添加到ArrayList,它将无缝地重新分配阵列),并且更安全。使用泛型时,可以保证添加正确类型的对象。使用数组,您可以将String[]转换为Object[],但ArrayList<String>不能转换为ArrayList , making it impossible to put a Double into a String`数组。

+0

非常完整的答案!谢谢! – Consuela