Una guía para PriorityQueue

Enlace original: https://blog.csdn.net/ohwang/article/details/116934308


PriorityQueue también se llama cola de prioridad


Nota 1:
PriorityQueue se implementa mediante una matriz. El tamaño de la matriz se puede aumentar dinámicamente y la capacidad es ilimitada.
La cola de prioridad utiliza clasificación de montón (el valor predeterminado es montón mínimo). La clasificación del montón solo puede garantizar que la raíz sea la más grande (la más pequeña) y que todo el montón no esté ordenado.

Nota 2:
No es seguro para subprocesos. La seguridad del hilo está disponible PriorityBlockingQueue.

Nota 3: El elemento
no está permitido null.

Nota 4:
offer(), poll(), remove(), add()la complejidad temporal es O(log(n)).
remove(Object)y contains(Object)la complejidad del tiempo es O(n).
peek, la complejidad del tiempo elementes .sizeO(常量)

Nota 5: El iterador proporcionado en
el método no garantiza que los elementos de la cola de prioridad se recorran de forma ordenada. Disponible si necesita atravesar en orden .iterator()
Arrays.sort(pq.toArray())

Nota 6: Puede especificar cómo ordenar en el constructor.

# 默认的初始容量(11)
PriorityQueue(int initialCapacity)
# 使用指定的初始容量创建一个 PriorityQueue,并根据其自然顺序来排序其元素。

PriorityQueue(int initialCapacity, Comparator<? super E> comparator)
# 使用指定的初始容量创建一个 PriorityQueue,并根据指定的比较器comparator来排序其元素。

Nota 7: Esta clase y sus iteradores implementan todos los métodos opcionales de las interfaces Collection e Iterator.


# 默认升序
PriorityQueue<Integer> queue2 = new PriorityQueue<>(10);
queue2.offer(11);
queue2.offer(9);
int len = queue2.size();
for (int i = 0; i < len; i++) {
    
    
    System.out.println(queue2.poll());
}
//输出 9 11

# 自定义降序
PriorityQueue<Integer> queue = new PriorityQueue<>(10, (a, b) -> b - a);
queue.offer(13);
queue.offer(9);
int len1 = queue.size();
for (int i = 0; i < len1; i++) {
    
    
    System.out.println(queue.poll());
}
//输出 13 9
# 模拟业务使用
PriorityQueue<People> queue = new PriorityQueue<>(11, (p1, p2) -> p2.age - p1.age);
for (int i = 1; i <= 10; i++) {
    
    
    queue.add(new People("张" + i, (new Random().nextInt(100))));
}
while (!queue.isEmpty()) {
    
    
    System.out.println(queue.poll().toString());
}

class People {
    
    
    String name;
    int age;
    public People(String name, int age) {
    
    
        this.name = name;
        this.age = age;
    }
    public String toString() {
    
    
        return "姓名:" + name + " 年龄:" + age;
    }
}

姓名:张9 年龄:67
姓名:张1 年龄:66
姓名:张8 年龄:65
姓名:张7 年龄:54
姓名:张4 年龄:48
姓名:张2 年龄:41
姓名:张5 年龄:39
姓名:张3 年龄:26
姓名:张6 年龄:11
姓名:张10 年龄:0

Supongo que te gusta

Origin blog.csdn.net/weixin_37646636/article/details/132768781
Recomendado
Clasificación