queueX

package
v2.2.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 10, 2026 License: Apache-2.0 Imports: 2 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type PriorityQueue

type PriorityQueue[T any] struct {
	// contains filtered or unexported fields
}

PriorityQueue 泛型优先队列

func NewPriorityQueue

func NewPriorityQueue[T any](less func(a, b T) bool, capacity int) *PriorityQueue[T]

NewPriorityQueue 创建优先队列【支持批量入队】 capacity <= 0 表示无界队列;>0 表示有界队列(最大容量为 capacity)

func (*PriorityQueue[T]) Dequeue

func (pq *PriorityQueue[T]) Dequeue() (T, bool)

Dequeue 出队堆顶元素

  • 【已加锁】

func (*PriorityQueue[T]) Enqueue

func (pq *PriorityQueue[T]) Enqueue(item T) bool

Enqueue 入队单个元素,有界队列满时返回 false

  • 【已加锁】
  • 返回 true :入队成功

func (*PriorityQueue[T]) EnqueueBatch

func (pq *PriorityQueue[T]) EnqueueBatch(items []T) (failed []T, ok bool)

EnqueueBatch 批量入队,返回每个元素是否成功入队

  • 【已加锁】
  • 有界队列:按顺序尝试入队,满则后续全部失败
  • 无界时永远 ok = true,性能无损

返回:

  • failed: 未能入队的元素列表(按原顺序)
  • ok: true 表示全部成功(failed 为空),false 表示有失败

对于有界队列:按顺序入队,一旦队列满,剩余元素全部视为失败。 对于无界队列:always ok = true, failed = nil。

func (*PriorityQueue[T]) IsEmpty

func (pq *PriorityQueue[T]) IsEmpty() bool

IsEmpty 判断是否为空

  • 【已加锁】
  • 返回 true :队列为空

func (*PriorityQueue[T]) IsFull

func (pq *PriorityQueue[T]) IsFull() bool

IsFull 仅对有界队列有意义

  • 【已加锁】
  • 返回 true 表示已满

func (*PriorityQueue[T]) Len

func (pq *PriorityQueue[T]) Len() int

Len 返回当前元素数量

  • 【未加锁,请使用Size,尽量使用下面加锁API保证线程安全】

func (*PriorityQueue[T]) Less

func (pq *PriorityQueue[T]) Less(i, j int) bool

Less 比较两个元素

  • 【未加锁,尽量使用下面加锁API保证线程安全】

func (*PriorityQueue[T]) Peek

func (pq *PriorityQueue[T]) Peek() (T, bool)

Peek 查看堆顶(不删除)

  • 【已加锁】

func (*PriorityQueue[T]) Pop

func (pq *PriorityQueue[T]) Pop() any

Pop 供 heap.Pop 调用,只负责弹出最后一个元素(不加锁!)

  • 【未加锁,请使用Dequeue,尽量使用下面加锁API保证线程安全】

func (*PriorityQueue[T]) Push

func (pq *PriorityQueue[T]) Push(x any)

Push 供 heap.Push 调用,只负责追加元素(不加锁!)

  • 【未加锁,请使用Enqueue,尽量使用下面加锁API保证线程安全】

func (*PriorityQueue[T]) RemoveIf

func (pq *PriorityQueue[T]) RemoveIf(predicate func(T) bool) bool

RemoveIf 删除第一个满足条件的元素

  • 【已加锁】

func (*PriorityQueue[T]) Size

func (pq *PriorityQueue[T]) Size() int

Size 返回当前元素数量

  • 【已加锁】

func (*PriorityQueue[T]) Swap

func (pq *PriorityQueue[T]) Swap(i, j int)

Swap 交换两个元素

  • 【未加锁,尽量使用下面加锁API保证线程安全】

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL