使用compareTo方法比较两种不同的数据类型

时间:2012-07-11 17:57:45

标签: java compareto

我有一个实现Set的类WordCount,但是我在使用WordCount类中从Word类中获取方法的comareTo方法时遇到了麻烦。我正在尝试将Word对象与String对象进行比较,但最后Word也是一个字符串,那为什么它会给我错误呢?

词类

public class Word implements Comparable<String>{

    String word;
    int count;

    public Word(String s)
    {
        word = s;
        count = 1;
    }

    @Override
    public int compareTo(String o) {
        return word.compareTo(o);
    }

    @Override
    public String toString()
    {
        return word + "(" + count + ")";
    }   

}

使用compareTo方法时,我在这个课程中遇到错误

public class WordCount implements Set<Word>{

    private Word[] items;
    private int size;

    public WordCount()
    {
       items = new Word[5]; 
       size = 1;
    }

    @Override
    public void add(Word s)
    {
        int i = 0;

        //grow array as needed      
        if (size >= items.length) {
            items = grow(items);
        }


        while (i < size) { 

            if (items[i].compareTo(s) > 0) {
                break;
            }
            if (items[i].equals(s)) {
                return;
            }
            i++;
        }

        items[i] = s;
        size++;


    }

    @Override
    public void show()
    {
        for(Word s : items)
        {
            System.out.println(s);
        }
    }

    public Word[] grow(Word[] a) {
        Word[] newA = new Word[a.length + 5];
        System.arraycopy(a, 0, newA, 0, a.length);
        return newA;
    }

}

2 个答案:

答案 0 :(得分:2)

Word类中的compareTo方法需要一个字符串参数,但是当您在WordCount类中调用它时,您将传递Word实例。您的Word类不会扩展String类,因此您的类型错误不匹配。

答案 1 :(得分:2)

将您的Word类声明为Comparable<Word>.(正如@Louis Wasserman评论的那样,几乎总是,类可以与自身或超类比较)

然后

 @Override
    public int compareTo(Word o) {
        return word.compareTo(o.word);
    }

另外,请考虑完全删除Word,而是使用Map<String, Integer>,其中键是您正在计算的单词,值是计数。