【问题标题】:How to Sort Values in Multiple ArrayLists?如何对多个 ArrayList 中的值进行排序?
【发布时间】:2015-07-07 19:24:56
【问题描述】:

我有一个Arraylist letters,其中包含字母frtd,还有two更多的Arraylists,其中一个存储字母的row poistion,另一个存储col position一封信。 但是在按字母顺序(Collections.sort(letters))对 Arraylist 字母进行排序之后,我怎样才能对每个字母的行和列值进行相应的排序呢?例如,如果字母d 具有row = 4col ==3,那么在对d 进行排序之后,将首先获得row 和``col 值f。如果字母得到它们的 rowcol 值,我该怎么做。

给定:

ArrayList<Character> letters;
ArrayList<Integer> rows;
ArrayList<Integer> cols;

片段:

Collections.sort(letters);
for(int i = 0; i < letters.size(); i++)
{
   System.out.println(letters.get(i).getChar() + rows.get(i) + col.get(i)
}

【问题讨论】:

  • 你必须使用列表吗?看起来地图将是一个更好的选择。因为您要将字母映射到行和列。
  • 也许你使用了错误的数据结构?
  • rgettman 的回答是正确的。最好将字母、行和列之间的关系封装在一个新的类中。

标签: java sorting arraylist


【解决方案1】:

答案不是对每个存储每个字符的一个元素的单个数组进行排序。

创建您自己的类以将 3 个关联的数据属性保存在一起,例如Letter.

执行以下操作之一:

  • 让类实现Comparable&lt;Letter&gt;,添加compareTo 方法。然后有一个ArrayListLetters,您可以在上面调用Collections.sort
  • 使用compare 方法创建另一个实现Comparator&lt;Letter&gt; 的类。使用您的ArrayListLetters,调用Collections.sort 传递一个附加参数,该参数是您的Comparator 的一个实例。

【讨论】:

  • 但是如何将相应的行和列分配给字母。
  • 您的Letter 类将包含行和列的属性以及实际字符。
  • 我可以像 TreeMap 一样使用 TreeMap 吗?@rgettman
  • 不,TreeMap 只有 2 个类型参数。但是你可以有一个TreeMap,它的键是Character,它的值是一对Integers。也可以维护TreeSet&lt;Letter&gt;。如果您的角色列表是唯一的并且随着时间的推移而变化,那将是最好的,但它也需要始终保持排序。但是,如果您只需要对其进行一次排序,则使用ArrayList 和调用Collections.sort 就可以了。无论哪种方式,Letter 都应该是 Comparable&lt;Letter&gt;,否则您还将创建另一个实现 Comparator&lt;Letter&gt; 的类。
  • 感谢@rgettman 的回复,但对于TreeMap,我该如何设置一对Integers?某行TreeMap&lt;Character, Integer, Integer&gt; temp ?
【解决方案2】:

恕我直言,这无法开箱即用,您可以通过两种方式实现:

  1. 使用任何合适的排序技术(Bubble、Merge、Quick 等),手动对它们进行排序。将所有三个一起处理,当您按所需顺序获得letters 时停止。

  2. 创建一个映射,键是您的字母,值是字符串(rowNum_colNum,或使用它们之间的任何分隔符)并按键对该映射进行排序。稍后,打破该值并检索两个数字。

【讨论】:

    猜你喜欢
    • 2012-02-03
    • 2011-04-11
    • 1970-01-01
    • 2019-09-26
    • 2016-08-28
    • 2011-03-29
    • 2016-04-15
    • 1970-01-01
    相关资源
    最近更新 更多