8

我正在尝试在自定义对象的 ArrayList 上使用 Collections.sort,但我收到警告,我不知道为什么

Warning: Type safety: Unchecked invocation 
sort(ArrayList<CharProfile>) of the generic method sort(List<T>) 
of type Collections

使用此代码:

ArrayList<CharProfile> charOccurrences = new ArrayList<CharProfile>();

...

Collections.sort(charOccurrences);

这是我的方法:

public class CharProfile implements Comparable {

...

@Override
public int compareTo(Object o) {

        if (this.probability == ((CharProfile)o).getProbability()) {
            return 0;
        }
        else if (this.probability > ((CharProfile)o).getProbability()) {
            return 1;
        }
        else {
            return -1;
        }
 }
}
4

3 回答 3

28

Comparable 应该使用类型安全来实现,这里是<CharProfile>.

public class CharProfile implements Comparable<CharProfile>{
       @Override
       public int compareTo(CharProfile cp) {
       ...
       }
}
于 2012-10-29T13:39:08.120 回答
1

您正在使用泛型,因此请使用您传递给方法的类型CharProfile而不是Object.

我还建议如图所示重新排列比较,以防概率是双倍的。

@Override
public int compareTo(CharProfile o) {

        if (this.probability < o.getProbability()) {
            return -1;
        }
        else if (this.probability > o.getProbability()) {
            return 1;
        }
        else {
            return 0;
        }
}
于 2012-10-29T13:38:34.653 回答
-2

注意到已经回答了,但无论如何这是我的输入:)

import java.util.ArrayList;
import java.util.List;
import java.util.Collections;

public class CharProfile implements Comparable <CharProfile>{
  public void doStuff(){
    List<CharProfile> charOccurrences = new ArrayList<CharProfile>();
    Collections.sort(charOccurrences);
  }
  @Override
  public int compareTo(CharProfile o) {
    return -1;
  }
}
于 2012-10-29T13:53:54.270 回答