簡體   English   中英

如何對對象的ArrayList進行排序?

[英]How do I sort an ArrayList of Objects?

我對此很陌生,如果這是一個陳舊的問題,對不起。 我有一個ArrayList,其中Node是一個自定義類。 這是我的定義方式:

static class Node  implements Comparable<Node> {
    String nodeName;
    String[] borderingNodes;

    public Node(String nodeName, String[] borderingNodes) {
        this.nodeName = nodeName;
        this.borderingNodes = borderingNodes;
    }       

    public int compareTo(Node node) {
        if(borderingNodes.length > node.borderingNodes.length) {
            return 1;           
        }

        if(borderingNodes.length == node.borderingNodes.length) {
            return 0;           
        }

        if(borderingNodes.length < node.borderingNodes.length) {
            return -1;          
        }
    }
}

現在,我嘗試做一個Arrays.sort(inputNodes) ,其中inputNodes是一個ArrayList ...但是我得到了錯誤:

 no suitable method found for sort(ArrayList<Node>)
        Arrays.sort(inputNodes);

如何正確執行此操作? 我的排序順便說一下...必須根據borderingNodes數組的大小進行排序。

使用Collections.sort(inputNodes)

Arrays.sort用於對數組進行排序。

您當前的compareTo方法不會為每個代碼路徑返回一個整數。 您可以使用Integer.compare

public int compareTo(Node node) {
   return Integer.compare(borderingNodes.length, node.borderingNodes.length);
}

您正在嘗試使用為數組設計的函數對List進行排序。

您可以改用Collections.sort(List) 它用於List

您可以使用Collections.sort() (如果需要,它需要一個可選的比較器)。

請注意,這將對您的收藏進行分類(即修改原件),因此,您可能希望復制一份。

還請注意訂購教程 ,這非常值得一讀。

您可以實現compareTo方法以進行自定義比較。 如何覆蓋compareTo:

public int compareTo(Node o)
{
     //return should be based on the fields in the class 

}

然后就像

Collections.sort(yourList);

實現自定義比較的另一個好辦法就是喜歡這個職位在這里

Collections.sort(nodeList, new Comparator<Node>(){
     public int compare(Node o1, Node o2){
         if(o1.nodeName.compareTo(o2.nodeName) == 0)
             //implement custom compare based on another field
         return o1.nodeName.compareTo(o2.nodeName);
     }
});
  1. 您可以使用Collections.sort(nodes)對元素進行排序,其中node是任何集合的子類,即ArrayList。

  2. 節點類不能是靜態的,因為您要比較節點類的不同對象。

  3. @Override應該在compareTo(Node other)方法之前添加,因為它會覆蓋接口中聲明的方法。

  4. 類變量應該是公共的,可以直接訪問,也可以是私有的,可以通過方法訪問。

  5. compareTo(Node other)方法中的比較可以簡化。

結果代碼如下所示:

class Node implements Comparable<Node> {
    private String nodeName;
    private String[] borderingNodes;

    public Node(String nodeName, String[] borderingNodes) {
        this.nodeName = nodeName;
        this.borderingNodes = borderingNodes;
    }       

    public int getBorderingNodesLength() {
        return borderingNodes.length;
    }

    @Override
    public int compareTo(Node otherNode) {
        return Integer.compare(borderingNodes.length, otherNode.getBorderingNodesLength());
    }
}

暫無
暫無

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

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