簡體   English   中英

Java中按多個字段排序的最有效方法

[英]Most efficient way to sort by multiple fields in Java

我正在一個項目中,我的內存中有一個表,例如:

field1    field2    field3    field4    field5
somevalue somevalue somevalue somevalue somevalue
somevalue somevalue somevalue somevalue somevalue
    .
    . 
    .
    .
    v

編寫允許用戶指定排序字段的某些非預定排列的函數的最佳方法是什么? (例如/按field2,然后按field1,然后按field5排序)。 到目前為止,我想到的最好的方法是遞歸函數,但是它很快就會變得很丑陋,尤其是在創建和管理每列中的行的“子組”時。 在我采取這種復雜的方法之前,有人可以指出我的方向嗎?

順便說一句,我的表存儲為數組列表。

在這里要實現的關鍵是您的搜索算法始終保持完全相同。 唯一改變的是您的實際比較功能。

我建議在ArraysCollections類中使用標准排序,但要編寫自己的自定義Comparable類或Comparator ,其compare方法將使用用戶提供的數據。 這實際上很有趣-我只寫過使用固定數據的Comparable類,但這恰恰是它們的用例。

您需要做的就是編寫函數

public int compare(Row row1, Row row2) {
    // iterate over the columns *in order of the user-supplied priority*
    // return appropriately
}

這是Comparable類的文檔

和比較器

您需要哪一個取決於您要實現的內容,我忘記了細節,但是應該很簡單。

這里的關鍵2件事是,您可以設置優先級之前實例化ColumnPrioritiesComparable類。 例如

class ColPriComp implements Comparable<ColPriComp> {
    private volatile int[] priorities; // possibly static, or obtained some other way,
    // so there's only one shared among all classes

    @Override
    public int compareTo(ColPriComp other) {
        // use "priorities" to do the comparison
    }

    public void setPriorities(int[] newPriorities) {
        this.priorities = newPriorities;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM