Подтвердить что ты не робот

Есть куча в java?

Я переношу библиотеку С++ на Java и мне нужна структура данных кучи. Существует ли стандартный или мне нужно будет сделать это самостоятельно?

4b9b3361

Ответ 2

Мин куча:

        PriorityQueue<Integer> minHeap = new PriorityQueue<Integer>();

Макс кучи:

PriorityQueue<Integer> maxHeap = new PriorityQueue<Integer>(new Comparator<Integer>() {
        @Override
        public int compare(Integer o1, Integer o2) {
            return - Integer.compare(o1,o2);
        }
    });

Ответ 3

PriorityQueue использует кучу. Исходя из документации оракула на https://docs.oracle.com/javase/8/docs/api/java/util/PriorityQueue.html кажется вероятным, что это реализация двоичной кучи. Я не думаю, что есть официальная реализация кучи Фибоначчи или кучи сопряжения, хотя я бы хотел увидеть одну из двух доступных.

Ответ 4

Для Java 8: обновление существующего ответа answer:

Вы можете использовать Java Priority Queue в качестве кучи.

Min Heap: → чтобы элемент min всегда был сверху, чтобы вы могли получить к нему доступ в O (1).

PriorityQueue<Integer> minHeap = new PriorityQueue<Integer>();

Max Heap: → чтобы элемент max всегда был сверху, в том же порядке, что и выше.

PriorityQueue<Integer> maxHeap = new PriorityQueue<>((Integer o1, Integer o2) -> (- Integer.compare(o1,o2)));

И вы можете использовать:
add → добавить элемент в очередь. O (log n)
remove → чтобы получить и удалить мин/макс. O (log n)
peek → получить, но не убрать мин/макс. O (1)

Ответ 5

Вы также можете рассмотреть TreeSet, что гарантирует время log (n) для основных операций (добавление, удаление, содержит).