簡體   English   中英

在arraylist內對對象進行排序

[英]Sorting objects inside arraylist

我有一些類類型的ArrayList,特別是:

ArrayList<RowColElem<T>> myList = new ArrayList<RowColElem<T>>();
myList.add(new RowColElem(4,4,11));
myList.add(new RowColElem(1,1,11));
myList.add(new RowColElem(3,3,11));
myList.add(new RowColElem(1,0,11));
myList.add(new RowColElem(3,0,11));

現在的輸出是:

[(4,4,11),(1,1,11),(3,3,11),(1,0,11),(3,0,11)]

是否可以對row和col的myList從升序進行排序? 因此輸出為:

[(1,0,11),(1,1,11),(3,0,11),(3,3,11),(4,4,11)]

是否可以對列表進行排序,而不是在**RowColElem**類中實現ComparableComparator

是的,您可以使用Comparator方法來實現。 在Java 8中相當整潔:

Collections.sort(myList, 
    Comparator.comparingInt(RowColElem::getRow).thenComparingInt(RowColElem::getCol));

這將使用行進行比較,如果相等,則使用列進行比較。 Comparator接口具有一些非常有用的靜態和默認方法-值得一看。

如果要在插入新元素時使集合保持排序,則可能要考慮使用TreeSet或其他自排序結構而不是ArrayList具體取決於您的用例。 這兩個結構自然會在迭代時保持其排序順序。 否則,您可能必須實現自己的SortedList類,該類可以透明地進行插入排序。

無論哪種方式,您都必須在類上實現Comparable<RowColElem<T>> 這很簡單。

@Override
public int compareTo(RowColElem<T> o) {

    int rowComp = Integer.compare(this.row, o.row);

    if (rowComp == 0) {
        return Integer.compare(this.column, o.column);
    }

    return rowComp;
}

您將必須實現Comparable接口,並且您的類RowColElement必須提供compareTo方法的實現,如果您不想實現這些接口,則必須擴展ArrayList並必須提供自己的實現。 這不是一個好主意,最好的方法是實現接口並提供自定義比較邏輯

暫無
暫無

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

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