【问题标题】:More efficient for an Java Array更高效的 Java 数组
【发布时间】:2014-06-11 17:46:15
【问题描述】:

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

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

问题在于,根据我的阅读,数组非常庞大,并且可能存在性能问题。此外,我必须能够创建一个“查找”方法,该方法应该能够通过输入他们的姓名在数组中搜索某人的号码。

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

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

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

提前感谢您的任何回复。

【问题讨论】:

  • 这个问题我不是很清楚。你有一个像 3578.txt 这样的文件,你想把 3578 保存在一个数组中,3578.txt 有多少行?
  • 必须是数组吗? Map<Short, String>HashMap<Short, String> 最有可能)将是更好的存储类型。 (您可能需要反转上述类型,具体取决于用于查找的数据。)
  • 使用 HashMap
  • 该文件将类似于 NameLastNameNumber 并且将位于单独的行中。
  • 这部分必须是一个数组,第二部分我们必须再做一次,但需要一张地图。但是我们的老师要我们使用数组,如果我们不使用数组,我们将不会得到任何分数。

标签: java arrays performance


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2014-04-29
    • 2013-10-09
    • 2012-11-25
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多