【问题标题】:Array and ArrayList [closed]数组和 ArrayList [关闭]
【发布时间】:2015-10-12 13:21:14
【问题描述】:

我对@9​​87654322@ 和ArrayList 有一些疑问。我在这里搜索过,但无法准确找到我正在寻找的答案。

  1. 我知道ArraysArrayListjava.util 的一部分。那么当我创建 ArrayArrayList 时,我是在创建对象和实例吗?

  2. 为什么必须导入java.util.ArraList来创建ArrayList对象,却不需要导入java.util.Arrays来创建Array对象?

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

  4. 为什么说使用and Array的性能比使用ArrayList的性能快?

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

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

  7. 如果我使用原始数据,那么我知道它们都应该存储在一个数组中,因为ArrayList 不能包含原始数据类型。但如果我只使用对象,我应该选择使用Array 还是ArrayList

【问题讨论】:

  • 可以肯定所有这些问题都有大量答案。
  • 作为第一个提示:java.util.Arrays 只是一个用于处理 real 数组的实用程序类。这个类不是数组。
  • 您将ArrayArrays 混淆了。
  • 我的目的是将您的问题分成多个主题。
  • 请咨询one question per post

标签: java arrays arraylist


【解决方案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 中引入 for-each 迭代之前发明的。您只能将迭代器用于实现 Iterable 接口的集合。 (同样,数组不是这种情况)。迭代器的优点之一是您可以在迭代时从列表中删除对象(即使用iterator.remove() 方法)

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

我通常更喜欢使用ArrayListArrayList 的主要优点之一是它会在超出容量时自动调整大小。数组不是这种情况。

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

只是为了完整:还有一个Arrays 类,其中包含数组实例中缺少的便捷方法。实际上,这些方法是严格的静态方法。

【讨论】:

  • 也很好的答案!谢谢!
【解决方案2】:

以最简单的方式,向细节挥手:

数组(注意small-a名称)是固定大小的聚合类型;它不是可以归类的东西。 ArrayList 是 Collections 框架的一部分。有关此集合提供的详细信息,请参阅 Javadocs。

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

一旦你通过了这些基础知识,你的其他问题就需要调整。

【讨论】:

  • 啊,我现在明白了。您可以理解我的真正疑虑,并为我指明正确的方向。我看你知识渊博! :-)。再见。
【解决方案3】:
  1. ArrayList 是 Java 集合库中可用的集合之一。您创建一个ArrayList 对象,它允许您管理一系列项目。另一方面,Arrays 是对数组进行操作的实用函数的集合。您可以通过执行new int[10] 之类的操作来创建一个新数组。

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

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

  4. 数组提供对数组存储的直接访问并保存任何类型的值(基元和对象引用),而ArrayList van 仅保存对象引用。对于对象引用,没有真正的速度差异,但对于基元,必须将值放入对象“盒子”并从中取出,这要慢得多。

  5. 1234563对于集合的类型。迭代器也用于循环,但更安全,因为您不必自己管理索引。
  6. 是的。 ArrayList 也是一个对象,因此多维 ArrayList 只是一个包含 ArrayLists 的 ArrayList

  7. 如果使用对象数组,请始终使用ArrayList。它更容易使用(例如,如果您添加到ArrayList,它将无缝地重新分配数组)并且更安全。使用泛型,您可以保证添加正确类型的对象。使用数组,您可以将String[] 转换为Object[],但不能将ArrayList<String> 转换为ArrayList, making it impossible to put aDoubleinto aString` 数组。

【讨论】:

  • 非常完整的答案!谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
  • 2012-12-26
  • 2016-11-26
  • 2013-12-12
  • 2014-03-20
  • 2016-08-01
  • 2013-02-01
相关资源
最近更新 更多