对Java Array更有效

时间:2014-04-25 20:52:40

标签: java arrays performance

我有一个作业,我们必须在其中创建一个存储名称和分机号码的目录。在第一部分中,我们必须将信息存储在一个数组中。我们必须能够向Array添加一个条目,并且最初还要读取.txt文件并将其存储在Array中。最后它必须打印数组。我只是想知道什么会更有效率,因为我在过去几个月才开始学习代码,这对我来说很难。

1)首先创建一个大小为[9999]的数组会更好(因为这是目录可以拥有的最大条目数,因为每个人都有一个唯一的四位数字)。我有一个名为count的INT,它保留了最后一个Array [x]的数量,因此当我调用addEntry这样的方法时,它会将Entry添加到[X + 1]。

问题在于,根据我的读法,阵列很大,可能会出现性能问题。此外,我必须能够进行查找'该方法应该能够通过输入名称来搜索数组中的某些数字。

我的其他选择: 2)当读取文件时,它计算文件有多少行(每个条目将在它自己的行上)然后创建文本文件中行数的数组。每当我想添加一个新条目时,我都会将数组复制到一个ArrayList中,然后返回一个添加了新条目的数组。但是我也读到复制数组也不是那么好,并且在现实的视图中,如果有人要使用这个目录,他们可能每天都在添加条目。

只要我存储在一个数组中并将数组打印到一个表中就可以了,但是当你不知道它的大小时,制作实际数组的最佳方法是什么? (是的,我知道我可以使用ArrayList,但具体说不是)

另外你如何删除数组中的一个条目,如果我按照自己的方式在Array [x]上删除了一个x,其中x被删除了。

提前感谢您的回复。

1 个答案:

答案 0 :(得分:1)

最好将数组初始化为最初需要它的大小。在此之后需要向数组添加项时,可以使用内存副本而不是对象克隆。

int[] arrayOne = new int[20];
int[] arrayTwo = new int[40];

System.arraycopy(arrayOne, 0, arrayTwo, 0, arrayOne.length);

这个副本实际上非常快,因为它只是从内存中直接复制。这实际上是数组列表的底层代码在大小翻倍时的作用。 如果你想要一个“动态”大小的数组,你可以编写自己的数组列表。 例如:

  • 从1号开始
  • 充满时双倍大小
  • 使用System.arraycopy()
  • 移动删除对象 当删除导致大小小于n / 3时,
  • 减少一半