【问题标题】:Searching for an element in an array, and returning it在数组中搜索一个元素并返回它
【发布时间】:2012-04-23 21:03:16
【问题描述】:

简而言之,这是我的困境: 我以这种格式导入了一个包含给定年份中前 2000 个名字的文件:

Mary, F, 2038 
Anna, F, 4230

(姓名、性别、这一年有多少人被命名)。

我已经用这些数据创建了一个数组(字符串类型)。现在,我必须做的是让用户搜索一个名字,并返回他们最好的年份。 前任: 搜索“山姆”

输出应该是:

"isamar 1990"
"rosamond 1910"
"sam 1900"
"samantha 1990"
"samara 2000"

程序的内容远不止这些,但我只需要知道如何在数组中搜索,返回我在数组中找到的内容,就完成了。

【问题讨论】:

  • 你应该考虑修改你的数据结构。单个字符串数组会使事情变得困难和缓慢。
  • 如果名称不同,则有一个数据结构胜过其他所有数据结构。
  • 如果您设法将文本文件加载到数组中(这是一项非常重要的任务),您为什么不知道如何在数组中搜索?
  • 伯纳德,我没怎么试过。我真的不知道如何在数组中搜索。
  • Pilotcam,我知道,但是用字符串来做这件事很慢,但标题是这样说的:/

标签: java arrays search return


【解决方案1】:

搜索一个数组可以像迭代它并将每个元素与所需的术语进行比较一样简单。例如,假设您有以下模型:

public class CommonName {
  public final String name;
  public final int year;
  public final CommonName(String name, int year) {
    this.name = name;
    this.year = year;
  }
}

假设您已经将文件作为这些对象的数组加载到 loadedNames 中,那么您可以使用 String#indexOf(String) method 搜索它们:

public static CommonName[] loadedNames = /* ... */;
public static Collection<CommonName> search(String searchTerm) {
  Collection<CommonName> matches = new ArrayList<CommonName>();
  for (CommonName cn : loadedNames) {
    if (cn.name.indexOf(searchTerm) >= 0) { matches.add(cn); }
  }
  return matches;
}

当然,您可能还需要解决其他问题,例如区分大小写和性能(数组搜索是 O(n))。

【讨论】:

  • 我喜欢你的回答,使用地图 会使其 O(1) 时间复杂度?
  • 不,您仍然需要搜索整个地图。仍然是 O(N)。不确定您是否可以解决此问题。
  • 看,我必须搜索多个数组,每个数组中的男性和女性名字都是给定年份的。如果我只是复制并粘贴并为所有数组执行此操作,这仍然有效吗? (我一共有262个数组,如果有更高效的方法请告诉我)
  • 为什么不将它们全部合并到一个数据结构或类中,如上所示?你能给我们消费者调用你的程序所需的确切定义吗?
  • 我确实需要那个类,但我还需要另一个类来处理加载的数据。在第二节课中,我每年需要男性和女性的两个实例 ArrayLists。然后我必须有一个实例来读取主要的每个文件(总共 131 个,131 年)。他对搜索方法并不特别,他说多个 if 语句应该没问题。如果我可以上传我可以上传的量规,复制和粘贴的时间太长了……我很抱歉虚张声势。并感谢大家的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-31
  • 2019-05-27
  • 1970-01-01
  • 2016-07-31
  • 1970-01-01
  • 2021-09-27
相关资源
最近更新 更多