2016-02-03 3 views
1
public class Sorting { 
    Vector<Talk> sorty(Vector <Talk> s) { 
     Collections.sort(s); 
     return s; 
    } 
} 

Мне нужно, чтобы отсортировать объекты класса Talk, но я получаю ошибку «Bound несоответствие».Нужна помощь в сортировке Вектор объектов

Обсуждение класса что-то вроде этого:

public class Talk { 
    String name; 
    int duration; 

    public int compareTo(Talk t) { 
     int compare = t.duration; 
     return this.duration - compare; 
    } 
} 

ответ

3

Ваш Talk класс должен реализовать интерфейс Comparable, если вы хотите, чтобы сортировать списки, содержащие его:

public class Talk implements Comparable<Talk> { 

Обратите внимание, что это не безопасно для сравнения int значения, вычитая их друг от друга, если вы не знаете, что оба значения будут только положительными (точнее, не более Integer.MAX_VALUE). Причина в том, что int будет переполняться и некорректно поворачиваться отрицательно, если значения более разнесены. Не бывает много, но это сложная ошибка, если это произойдет, поэтому лучше привыкнуть к альтернативе.

Лучший способ сравнения, который всегда работает, чтобы позвонить Integer.compare(int, int):

public int compareTo(Talk t) { 
    return Integer.compare(duration, t.duration); 
} 
1

Обсуждение делает реализовать метод compareTo, но не реализует интерфейс Comparable, который где CompareTo должен быть переопределен с.

Изменить ваш Поговорите:

public class Talk implements Comparable{ 
    String name; 
    int duration ; 

    @Override 
    public int compareTo(Object o) 
    { Talk t = (Talk)o; 
     int compare = t.duration; 
     return this.duration - compare; 
    } 
} 

Для меня, я всегда предпочитаю фиксированный -1,0 или 1: возвращение

@Override 
     public int compareTo(Object o) 
     { Talk t = (Talk)o; 
      int compare = t.duration; 
      return this.duration == compare ? 0 : this duration > compare ? 1 : -1; 
     } 

, но это не является обязательным.

Я бы, однако, рекомендовал пересмотреть модификаторы доступа ваших переменных. Как правило, частные переменные рекомендуются для видимости пакета.

0

Я надеюсь, что я могу вам помочь.

public class TestSorting { 

    /** 
    * @Desc: 
    *  
    * @param args 
    * 
    * @Author: luochao 
    * @CreateTime: 2016年2月3日 
    */ 
    public static void main(String[] args) { 
     Vector<Talk> vector = new Vector<Talk>(); 
     vector.add(new Talk("centos",3)); 
     vector.add(new Talk("linux",1)); 
     vector.add(new Talk("java",2)); 
    } 

} 

class Talk implements Comparable<Talk> { 
    private String name; 
    private int duration; 
    public Talk(String name,int duration) { 
     this.name = name; 
     this.duration = duration; 
    } 

    public String getName() { 
     return name; 
    } 



    public void setName(String name) { 
     this.name = name; 
    } 



    public int getDuration() { 
     return duration; 
    } 



    public void setDuration(int duration) { 
     this.duration = duration; 
    } 

    @Override 
    public int compareTo(Talk o) { 
     int compare = o.duration; 
     return -(this.duration - compare); 
    } 
} 
+0

Вы также должны объяснить, что именно вы сделали, а не просто предоставить готовый код для копирования. – Stultuske

+0

Мне так ужасно жаль слышать, что в первый раз, чтобы увидеть это, я просто хочу переопределить его просьбу, не подумав ни о чем другом. Многие из вас советуют. – Risk4U

+0

В принципе, вы просто повторили уже предоставленные ответы без объяснений. – Stultuske

Смежные вопросы