2016-04-05 3 views
-1

У меня есть очередь приоритетов, которая содержит пару точек Я выполнял итерацию в этой очереди и вставлял каждую из точек в паре в набор деревьев.Сохранение набора деревьев Сохранение - Java

Проблема в том, что я хочу поддерживать порядок, который был в очереди приоритетов Как мне реализовать Компаратор набора деревьев?

+0

же образом приоритетная очередь производит это порядок, то есть один и тот же компаратор? – Thomas

+0

Я не могу этого сделать, поскольку очередь priorty содержит пару точек, которые представляют строки, и мой компаратор использует это. Я не могу написать компаратор для одной точки. – 2D3D

+0

Что делать, если точка имеет несколько приоритетов, т. Е. Является частью нескольких пар? И нужно ли это «TreeSet» или не использовать «LinkedHashset»? – Thomas

ответ

1

Вот возможность. Я не вставляю сами точки в TreeSet, но обертка, которая отслеживает порядок, в котором они находились, в PriorityQueue. Это имеет то преимущество, что нам не нужно изменять класс Point.

Вот класс-оболочка:

import java.util.PriorityQueue; 
import java.util.TreeSet; 

public class Sortable<T> implements Comparable<Sortable<T>> { 

    T element; 
    int order; 

    public Sortable(T element, int order) { 
     this.element = element; 
     this.order = order; 
    } 

    @Override 
    public int compareTo(Sortable<T> o) { 
     return order - o.order; 
    } 

} 

Теперь вы можете сделать:

public void transfer(PriorityQueue<PointPair> from, TreeSet<Sortable<Point>> to) { 
    PointPair pp = from.poll(); 
    int count = 0; 
    while (pp != null) { 
     to.add(new Sortable<Point>(pp.getLeftPoint(), count)); 
     count++; 
     to.add(new Sortable<Point>(pp.getRightPoint(), count)); 
     count++; 

     pp = from.poll(); 
    } 
} 
+0

Если вы настаиваете на формулировке своего вопроса, что 'TreeSet' должен содержать' Point' и иметь 'Comparator': ваш' Comparator' мог бы иметь собственную структуру данных, чтобы отслеживать порядок точек, например 'HashMap ', где целое число будет служить той же цели, что и 'int order' в моем коде. Я считаю это слишком сложным, но я не вижу большой выгоды. Вам решать. –

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