【问题标题】:Which is better approach for getting sorted data哪个是获取排序数据的更好方法
【发布时间】:2015-09-17 14:54:35
【问题描述】:

我需要将排序后的数据写入文件。数据(IP 对象)根据 IP(字符串,IP 对象的属性)进行排序。

所以我有两个选择,要么采用 TreeMap 并将数据插入到 treeMap 中,要么在获取所有数据后对其进行排序。

Map<String, IPObject>> map = new TreeMap<>(new IPComparator);

将所有对象简单存储在 ArrayList 中,然后调用 sort 方法为

Collection.sort(ip_Object_List, new IPListComparator);

那么哪种方法更好更高效?

【问题讨论】:

  • 您基本上是在问插入排序是否比Collections.sort 使用的排序算法更好或更有效。我的感觉是“是的,可能”,但实际上,最好的办法是使用实​​际数据进行测试——意识到 A) 对 JVM 进行微基准测试的危险,以及 B) 过早优化的危险。

标签: java sorting arraylist treemap


【解决方案1】:

“哪种方法更好”的答案很大程度上取决于您需要一种方法的目的。

  1. 如果您的 ip_Object_List 被创建一次,之后就再也没有更改过,那么 Collection.sort 方法更有效,因为升迭代运行得更快
  2. 如果您的 map 经常更新,并且您总是希望按排序顺序访问它,则 TreeMap&lt;&gt; 表示可能会更快,具体取决于您迭代它的频率。

您采用的方法不太可能在性能和效率方面产生明显的差异,因此请选择更适合您的方法。仅当分析器运行表明代码在您选择的结构中花费了过多的 CPU 或内存时,才应考虑另一种表示。

【讨论】:

    【解决方案2】:

    这些都是 O(n log n) 操作。使用 Collections.sort() 不需要额外的空间,而 TreeMap 将有 O(n) 空间用于维护地图。如果您要经常添加,然后对列表进行排序,那么 TreeMap 会更好 - 每个新插入只有 O(log n)。保持数据结构允许您快速搜索元素并对数据集进行各种其他操作。

    因此,如果您要访问和修改已排序的集合,请使用 TreeMap 否则只需对其进行排序。

    【讨论】:

      猜你喜欢
      • 2013-12-19
      • 1970-01-01
      • 1970-01-01
      • 2016-02-25
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 2022-10-30
      • 1970-01-01
      相关资源
      最近更新 更多