簡體   English   中英

如何定義通用的可比較數組類?

[英]How to define a generic comparable array class?

我想定義一個通用類ComparableList <>,該類擴展ArrayList並實現Comparable接口,以便可以使用compareTo方法比較ComparableList類型的兩個對象。 compareTo應該執行字典比較。 這是我的代碼:

class ComparableList <T extends Comparable<T>> extends ArrayList implements Comparable<ComparableList>{
@Override
    public int compareTo(ComparableList o){
        Iterator citer = this.iterator();
        Iterator oiter = o.iterator();
        while (citer.hasNext() && oiter.hasNext()){
            if (citer.next() > oiter.next()){
                return 1;
            }else if (citer.next() < oiter.next()){
                return -1;
            }else {
                if (!citer.hasNext()){
                    return -1;
                }
                if(!oiter.hasNext()){
                    return 1;
                }
            }
        }
        return 0;
}

}

我收到了這樣的錯誤消息:

TCL.java:11: error: bad operand types for binary operator '>'
            if (citer.next() > oiter.next()){
                             ^
first type:  Object
second type: Object
TCL.java:13: error: bad operand types for binary operator '<'
            }else if (citer.next() < oiter.next()){
                                   ^
first type:  Object 
second type: Object

我認為這應該是ComparableList,而不是Object。 誰能告訴我原因?

您需要使用Comparable.comapreTo()比較這些對象(這就是為什么您在其中<T extends Comparable<T> )。 您需要首先檢查兩邊是否為空。

另外,每次對Iterator.next()調用都會迭代到下一個元素,您不想在一個循環迭代中兩次調用它-在循環開始時存儲項目,然后使用存儲的值。

Comparable不會覆蓋><運算符(什么也不能)。 由於您的T實現了Comparable ,請使用compareTo

int result = citer.next().compareTo(oiter.next());
if (result != 0) {
    return result;
} else {
    if (citer.hasNext()) {
        return -1;
    }
    if (oiter.hasNext()) {
        return 1;
    }
}

請注意,還要求next每次迭代只有一次 ,因為next先進的迭代器。

您的ComparableList中的每個元素的類型都是T extends Comparable<T> ,以確保二進制運算符對此不可用(Java沒有運算符重載),但是由於它擴展了Comparable ,因此您可以使用compareTo來代替<和>。 改用它。

暫無
暫無

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

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