You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

51 lines
1.1 KiB

package container
// LimitedQueue 是一个具有有限容量的泛型队列
type LimitedQueue[T any] struct {
capacity int
queue []T
}
// NewLimitedQueue 创建一个新的 LimitedQueue
func NewLimitedQueue[T any](capacity int) *LimitedQueue[T] {
return &LimitedQueue[T]{
capacity: capacity,
queue: make([]T, 0, capacity),
}
}
// Enqueue 向队列中添加一个元素
func (lq *LimitedQueue[T]) Enqueue(value T) {
if len(lq.queue) >= lq.capacity {
lq.queue = lq.queue[1:]
}
lq.queue = append(lq.queue, value)
}
// Dequeue 从队列中移除最早添加的元素
func (lq *LimitedQueue[T]) Dequeue() *T {
if len(lq.queue) == 0 {
return nil
}
elem := lq.queue[0]
lq.queue = lq.queue[1:]
return &elem
}
// Len 返回队列的长度
func (lq *LimitedQueue[T]) Len() int {
return len(lq.queue)
}
// Peek 返回队列的第一个元素但不移除它
func (lq *LimitedQueue[T]) Peek() *T {
if len(lq.queue) == 0 {
return nil
}
return &lq.queue[0]
}
// ToSlice 返回队列中所有元素的切片
func (lq *LimitedQueue[T]) ToSlice() []T {
return append([]T(nil), lq.queue...)
}