繁体   English   中英

对于Java阵列更有效

[英]More efficient for an Java Array

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

1)最好先创建一个大小为[9999]的数组(因为这是该目录可能具有的最大条目数,因为每个人都有一个唯一的四位数)。 我有一个称为count的INT,它可以计数要添加的最后一个Array [x]的数量,因此当我调用类似addEntry的方法时,它将把Entry添加到[X + 1]。

问题是,据我所读,数组很大,可能会有性能问题。 我还必须能够做出一个“查找”方法,该方法应该能够通过输入他们的名字在数组中搜索某人的号码。

我的另一个选择:2)读取文件时,它将计算文件的行数(每个条目将位于其自己的行上),然后在文本文件中创建一个行数数组。 每当我要添加新条目时,我都会将数组复制到ArrayList中,然后再将其添加到添加了新条目的数组中。 但是我也读到复制数组也不太好,而且在现实情况下,如果有人要使用此目录,他们可能每天都会添加条目。

只要将其存储在Array中并将Array打印到表中,这一切都很好,但是当您不知道大小时,制作实际Array的最佳方法是什么? (是的,我知道我可以使用ArrayList,但具体说不可以)

另外,如果我使用我的方式,您将如何删除数组中的条目,如果在Array [x]处,x会被删除,则缺少条目。

预先感谢您的任何答复。

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

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

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

该副本实际上非常快,因为它只是从内存中直接复制。 实际上,这是数组列表的基础代码加倍大小时所执行的操作。 如果需要“动态”大小的数组,则可以编写自己的数组列表版本。 例如:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM