【问题标题】:2D Array that can hold multiple values with no limits可以无限制地保存多个值的二维数组
【发布时间】:2013-04-06 23:45:25
【问题描述】:

我对 java 很陌生,目前正在开发一个不太简单的 Web 浏览器应用程序,我想在其中记录一个具有 2D 数组设置的永久历史文件,其中 3 列包含“查看日期”、“URL”、 "该 URL 以前被查看过多少次"。

目前我有一个临时解决方案,它只保存“URL”,它也用于使用 ArrayList 的“后退,前进”功能。

private List tempHistory = new ArrayList();

我正在阅读 Java 文档,但我无法提出解决方案,除非我错过了显而易见的,没有像 Python 中那样灵活的 ArrayList 的二维数组?

【问题讨论】:

  • ArrayList<ArrayList>
  • List<List<…>>,为example

标签: java arrays multidimensional-array


【解决方案1】:

根据您的描述,听起来您不需要二维数组。你只有一个维度——但是是复杂的数据类型,对吧?

因此,定义一个HistoryItem 类或具有Date 属性的东西,用于查看日期,URL 用于URL,int 用于查看次数。

那么你只需要List<HistoryItem> history = new ArrayList<HistoryItem>()

我不认为你真的想要一个类似二维数组的东西的原因是它只能保存一种数据类型,而且你显然有几种数据类型在这里工作,比如日期和计数。但如果你真的想要一个类似表格的抽象,试试 Guava 的Table

【讨论】:

  • 谢谢,我认为您的方法听起来最合适,但为了澄清我的理解,我简单地设置了一个类来存储三个变量,将它们指定为一行并保存到二进制文件中需要一个数组?我关心的是维护数据类型以便在加载后轻松排序。我会试一试并报告结果,谢谢。
  • 你提到了几个不同的converns。如果要将这些对象保存到二进制文件中,请查看 Serializable。如果您希望它们可排序,请考虑实现Comparable 或创建Comparator
【解决方案2】:

不,Java 中没有内置的二维数组类型(除非您使用原始数组)。

可以只使用列表列表 (List<List>) - 但是,我认为使用您放入列表的自定义类型几乎总是更好。在您的情况下,您将创建一个类HistoryEntry(带有“查看日期”、URL 等字段),并使用List<HistoryEntry>。这样一来,您就可以获得正确类型为您带来的所有好处(类型检查、IDE 中的补全、将方法放入类的能力等)。

【讨论】:

    【解决方案3】:

    那你打算如何浏览历史?如果您想稍后搜索每个 url 的历史记录,那么 ArrayList 方法可能效率不高。

    我更喜欢以 URL 为键的 Map。

    Map<Url,UrlHistory> browseHistory = new HahMap<Url,UrlHistory> ();
    

    UrlHistory 将包含您想要与 url 关联的所有字段,例如 no。页面被访问的次数和所有次数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-07
      • 2015-02-07
      • 2022-01-18
      • 2015-05-27
      • 1970-01-01
      相关资源
      最近更新 更多