【问题标题】:Java efficiently store large amount of sorted dataJava 高效存储大量排序数据
【发布时间】:2014-10-08 09:37:43
【问题描述】:

通常当我想在java中存储大量数据时,我使用Set<String>,它非常快速高效。

 Set<String> example = new HashSet<String>();

但问题是无法排序。我不能使用Lists,因为我要存储大量数据(100,000 秒),而使用List 会严重影响我的程序性能。

ArrayList<String> example = new ArrayList<String>()

还有其他方法吗?我需要对我的数据进行排序(按日期),并且不断将新元素添加到 List

【问题讨论】:

  • 数据结构需要动态吗?或者可以假设最大数量的元素?如果是这样,一个简单的数组就可以解决问题。
  • 恐怕需要动态的。
  • 看看TreeSet
  • 为什么在 list 中存储 100 000 个字符串会影响您的程序性能,而将它们存储在 set 中不会?您是否需要快速检查集合中是否存在字符串?您还对哪些其他操作感兴趣?
  • 除非您清楚描述您的数据结构的关键使用模式(和约束),否则我们无法为您提供任何有价值的建议。

标签: java performance arraylist set


【解决方案1】:

您可以使用 TreeSet,它是 Set
的一个实现 它使用可比较的自然顺序或给定的比较器对元素进行排序。

设置示例 = new TreeSet();

查看apihere

【讨论】:

    【解决方案2】:

    您可以使用 TreeSet!使用 TreeSet 并一一添加值。当您获得值时,它将为您提供数据的排序值。

    【讨论】:

      【解决方案3】:

      如果您只是想以排序形式保存数据,那么最有效的解决方案是:

      1. 将数据加载到ArrayList
      2. 复制到数组。
      3. 使用Arrays.sort 对数组进行排序。
      4. 要搜索,请使用“二分搜索”,即O(logN)

      如果您希望能够构建散布的构建和搜索,那么使用 TreeSet。这会使用更多内存,但对于增量构建的集合,它会更快,并且搜索性能大致相同。

      【讨论】:

        猜你喜欢
        • 2012-10-31
        • 1970-01-01
        • 2015-02-04
        • 1970-01-01
        • 2016-03-26
        • 2018-07-09
        • 2012-02-01
        • 2017-04-09
        • 2012-08-14
        相关资源
        最近更新 更多