priority

package
v0.8.6 Latest Latest
Warning

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

Go to latest
Published: Aug 18, 2026 License: Apache-2.0 Imports: 1 Imported by: 0

Documentation

Overview

Package priority 提供泛型优先级队列:基于二叉堆实现,支持 Push/Pop/Peek/Update/Remove。

典型场景:

  • 调度器:按优先级或截止时间取下一个任务
  • 匹配系统:按等待时长优先出队
  • 延迟队列:按触发时间排序
  • 定时器:最近到期的在堆顶

提供两个变体:

  • Queue[T]:非并发安全,零开销(适合单 goroutine 使用)
  • SyncQueue[T]:内置 RWMutex 的并发安全版本

纯标准库、泛型。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type LessFunc

type LessFunc[T any] func(a, b T) bool

LessFunc 比较函数:返回 true 表示 a 优先级高于 b(应排在前面)。

type Queue

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

Queue 泛型优先级队列(二叉堆)。非并发安全。

func New

func New[T any](less LessFunc[T]) *Queue[T]

New 创建优先级队列。less(a,b) 返回 true 表示 a 排在 b 前面(最小堆:用 <,最大堆:用 >)。

func (*Queue[T]) At

func (q *Queue[T]) At(i int) T

At 返回索引 i 处的元素。

func (*Queue[T]) Items

func (q *Queue[T]) Items() []T

Items 返回底层切片的副本(无序,堆序)。

func (*Queue[T]) Len

func (q *Queue[T]) Len() int

Len 返回队列长度。

func (*Queue[T]) Peek

func (q *Queue[T]) Peek() T

Peek 查看优先级最高的元素(不出队)。队列为空时 panic。

func (*Queue[T]) Pop

func (q *Queue[T]) Pop() T

Pop 取出优先级最高的元素。队列为空时 panic。

func (*Queue[T]) Push

func (q *Queue[T]) Push(item T)

Push 入队。

func (*Queue[T]) PushPop

func (q *Queue[T]) PushPop(item T) T

PushPop 等价于 Push+Pop 但更高效(避免不必要的堆调整)。

func (*Queue[T]) Remove

func (q *Queue[T]) Remove(i int) T

Remove 按索引删除元素。返回被删除的元素。

func (*Queue[T]) Update

func (q *Queue[T]) Update(i int)

Update 通知队列第 i 个元素的优先级已变化,重新调整位置。

type SyncQueue

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

SyncQueue 并发安全的优先级队列。

func NewSync

func NewSync[T any](less LessFunc[T]) *SyncQueue[T]

NewSync 创建并发安全的优先级队列。

func (*SyncQueue[T]) Len

func (sq *SyncQueue[T]) Len() int

Len 返回队列长度。

func (*SyncQueue[T]) Peek

func (sq *SyncQueue[T]) Peek() (T, bool)

Peek 查看优先级最高的元素。队列为空返回 zero value 和 false。

func (*SyncQueue[T]) Pop

func (sq *SyncQueue[T]) Pop() (T, bool)

Pop 取出优先级最高的元素。队列为空返回 zero value 和 false。

func (*SyncQueue[T]) Push

func (sq *SyncQueue[T]) Push(item T)

Push 入队。

func (*SyncQueue[T]) PushPop

func (sq *SyncQueue[T]) PushPop(item T) T

PushPop 等价于 Push+Pop。

Jump to

Keyboard shortcuts

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