java - 存储多个相关值以进行排序的最有效方法?

时间:2012-10-14 05:57:26

标签: java sorting data-structures

我需要在java中解析一个xml文件并将其存储在一个数组中以便稍后进行排序。 xml文件具有此格式

<Experiments>
    <Experiment ID="312" RIndex="3" DIndex="3">40231</Experiment>
    <Experiment ID="481" RIndex="2" DIndex="5">23801</Experiment>
    <Experiment ID="102" RIndex="1" DIndex="5">41231</Experiment>
</Experiments>

对于每个实验,必须存储RIndex,DIndex和实验值。我认为最直接的方式是2D数组,但有一个函数我需要按其中一个属性(RIndex,DIndex或Experiment值)进行排序。我也想过使用集合的ArrayList。这是最好的方法吗?

4 个答案:

答案 0 :(得分:1)

我肯定会在顶层使用ArrayList,并提供自定义Comparator来根据您考虑的任何排序条件对值进行排序。有关比较器的使用,请参阅:

选择如何存储值将是您最重要的选择。最好的选择可能是:

  • 定义一个包含所需字段的类Experiment。这将是最有效的。
  • 将每个实验结果存储在HashMap中,该字段将字段映射到值。这样效率会降低,但如果你有不同类型的不同属性的实验等,这可能是一种有用的方法。

答案 1 :(得分:0)

创建一个包含3个值的简单类,然后为每个排序情况创建适当的Comparators,然后将它们填入ArrayList并使用正确的Comparator。

答案 2 :(得分:0)

您可以使用实例变量ExperimentIDRIndexDIndex创建一个类Value,然后实现您可以对其进行排序的Comparator界面您Experiment类的对象。(假设您知道如何使用Comparator)

答案 3 :(得分:0)

由于性能似乎很关键,我相信你会设置基准测试。他们会告诉你什么是最好的方式。

显而易见的方法是将数据放在SortedSet中,这样就不会有单独的排序步骤。应该比从文件中读取任何内容更快,所以我猜你应该没问题。那个。

您需要创建一个包含所有相关值以及可能的其他ID的简单类,以使每个值都唯一。

此类应实现Comparable界面,或者如果您需要使用不同的标准进行排序,则可以单独提供Comparators