繁体   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