Изменение LinkedList в очередь приоритетов - PullRequest
1 голос
/ 05 февраля 2011

В настоящее время у меня есть класс, который имеет 3 связанных списка строк или целых, которые я использую в качестве стека через трио команд addFirst и removeFirst.(Воспроизведенный ниже класс)

Я хочу добавить возможность использовать класс вместо очереди с приоритетами.Я знаю, что приоритетная очередь равна , поэтому я ищу простой способ добавления insertWithPriority и removeNext.

Интуитивно понятный вариант - перейти из класса 3Вместо этого он связал 3 списка priorityQueues, но я немного запутался, как использовать очереди с приоритетами в java. В частности, , мне нужно, чтобы все 3 работали одинаково, чтобы removeNext удалял те же 3 элемента, которые были добавлены insertWithPriority.

Может ли кто-нибудь пролить свет на реализациюправильный приоритетQueue?

class ThreeList{
    public LinkedList foo;
    public LinkedList bar;
    public LinkedList etal;

    public ThreeList(){
        foo= new LinkedList();
        bar= new LinkedList();
        etal= new LinkedList();
    }

    public void addLast(String foo, int bar, int etal){
        foo.addLast(foo);
        bar.addLast(bar);
        etal.addLast(etal);
    }

    public void addFirst(String foo, int bar, int etal){
        foo.addFirst(foo);
        bar.addFirst(bar);
        etal.addFirst(etal);
    }

    public void removeFirst(){
        foo.removeFirst();
        bar.removeFirst();
        etal.removeFirst();
    }

    public void removeLast(){
        foo.removeLast();
        bar.removeLast();
        etal.removeLast();
    }   
}

1 Ответ

1 голос
/ 05 февраля 2011

PriorityQueue предлагает расстановку приоритетов с помощью Comparable или Comparator, т. Е. Вы используете только add.

В вашем случае было бы лучше использовать простой статический внутренний класс для захвата foo, bar и etal в один объект.

static class FooBar implements Comparable<FooBar> {
   String foo;
   int bar, etal;

   int compareTo(FooBar other) {
     ... comparison logic here...
   }

}

Если значения foo, bar, etal неявно не содержат приоритет, вам нужно добавить другое поле в FooBar и использовать его в compareTo.

...