如何对矢量矢量进行排序?

时间:2011-05-17 13:22:45

标签: java sorting vector

在Java中,我想知道如何在特定列上对矢量矢量进行排序,其中一个矢量用作行,一个矢量用于保存所有行矢量,例如

 Vector row = new Vector();
    Vector main = new Vector();

    row.add("Column1");
    row.add("Column2");
    row.add("Column3");

    main.add(row);

然后对其中一列中的变量进行排序,例如Column2

谢谢

5 个答案:

答案 0 :(得分:8)

可以编写一个Comparator<Vector>,根据第二个元素比较两个Vector个对象,然后使用Collections.sort(List,Comparator)

但是从长远来看,如果你摆脱Vector - in - Vector构造并替换内部{{1},你将会好得多。使用自定义类来表示您希望它表示的数据。然后你会写一个Vector,这将更容易解释(“哦,这个比较器根据名字进行比较”而不是“为什么这个比较器采用索引1处的元素并比较它?那是什么意思?“)。

答案 1 :(得分:4)

我想你想要在'main'而不是'row'中排序:

Vector<String> row = new Vector<String>();
Vector<Vector<String>> main = new Vector<Vector<String>>();

Collections.sort(main, new Comparator<Vector<String>>(){
    @Override  public int compare(Vector<String> v1, Vector<String> v2) {
        return v1.get(1).compareTo(v2.get(1)); //If you order by 2nd element in row
}});

答案 2 :(得分:2)

(为什么人们仍然使用Vector并避免使用泛型?我应该在SO上提出这个问题......;)

首先让我建议一个现代的重构:

List<List<String>> main = new ArrayList<List<String>>();
List<String> row = new ArrayList<String>();
row.add("Column1");
row.add("Column2");
row.add("Column3");
main.add(row);

现在我们可以查看将Collections.sort(Comparator<T> comp)进行排序的main。我们只需实现一个Comparator类,它能够根据我们的参数比较两行 - 在我们的例子中是某一列:

public class MyComparator implements Comparator<List<String>> {
  private int columnIndex = 0;
  public MyComparator(int columnIndex) {this.columnIndex = columnIndex;}

  @Override
  public int compare(List<String> thisRow, List<String> otherRow) {
    return thisRow.get(columnIndex).compareTo(otherRow.get(columnIndex));
  }
}

像这样使用比较器:

Collections.sort(main, new MyComparator(1));  // will sort according to "column2"

注意 - 这是一个不完整的实现,我不检查索引值是否有效以及是否所有行都具有相同的大小..应该在生产代码中完成。

答案 3 :(得分:0)

矢量可能不是你桌子的最佳代表。看看Glazed Lists

答案 4 :(得分:0)

创建一个可重用的Comparator,可用于对Vector(或List或Array)中的任何索引进行排序。 Column Comparator为您完成此操作。

相关问题