2016-10-31 4 views
1

Я понятия не имею, как использовать приоритетную очередь в java, как в C++. В C++ мы можем сделать это следующим образом:Сравнение очередей приоритетов - java vs C++

priority_queue<object*, vector<object*>, compareClass> 

Так что, когда у нас есть класс, как это:

class Foo{ 
public: 
    int number1; 
    int number2 
    Foo(){}; 
}; 

Мы можем использовать две разные очереди, чтобы сравнить в них 2 разных идей, просто сделав два compareClasses.

В Java я получил причины проблемы, когда я делаю очереди, как это:

PriorityQueue<Foo> pq = new PriorityQueue<Foo>(); 

я могу переопределить функцию CompareTo только один раз. Я знаю, что я могу сделать переопределение что-то вроде этого:

class Foo implements Comparable<Foo>{ 
public int number1; 
public int number2; 

    @Override 
    public int compareTo(Foo other){ 
     if(number2 != // something) 
      return Int.compare(number, other.number); 
     else 
      return Int.compare(number2, other.number2); 
    } 
} 

В этом случае соучастии программы отличается. Могу ли я сделать что-то вроде C++ в Java?

+1

Нет, кроме попыток иметь аналогичную структуру кода. вы действительно не можете перевести иконы C++ на Java. Оба языка имеют разные идеологии. И вы должны знать, что Java ** generics ** [отличается] (http://stackoverflow.com/questions/36347/what-are-the-differences-between-generic-types-in-c-and-java) из шаблонов ** C++ **. – WhiZTiM

ответ

3

При создании Java PriorityQueue используйте конструктор, который принимает Comparator. Это позволяет использовать любую логику сравнения, которую вы хотите, несмотря на любой метод compareTo, который уже может быть определен для класса.

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

  • Нет связанных вопросов^_^