增加实现服务器地址最小堆(按照更新时间排序)

This commit is contained in:
free will committed 2021-05-05 17:27:36 +08:00
1 parent 67bc43860d
commit 53a546d3c3
2 files changed
+45 -1

No files matched your search

+45 -1
View File
@@ -1,11 +1,55 @@
package main
// 模拟服务器地址列表
import "time"
// 服务器地址
type CanBeUsedAddr struct {
ip string
ip string // 服务器IP地址
updateTime time.Time // 本地址更新时间
}
func (addr CanBeUsedAddr) getIP() (ip string){
// 返回一个可用地址
return addr.ip
}
// 可用服务器地址最小堆:确保可以取出最新加入的可用服务器地址
type CanBeUsedAddrHeap []CanBeUsedAddr
// 实现最小堆的接口:比较大小。时间越晚越小
func (h *CanBeUsedAddrHeap) Less(i,j int) bool {
return (*h)[i].updateTime.After((*h)[j].updateTime)
}
// 实现最小堆的接口:获取堆大小。
func (h *CanBeUsedAddrHeap) Len() int {
return len(*h)
}
// 实现最小堆的接口:交换两个元素。
func (h *CanBeUsedAddrHeap) Swap(i,j int) {
(*h)[i], (*h)[j] = (*h)[j], (*h)[i]
}
// 实现最小堆的接口:推入一个元素(并排序)。
func (h *CanBeUsedAddrHeap) Push(val interface{}) {
*h=append(*h,val.(CanBeUsedAddr))
}
// 实现最小堆的接口:弹出一个元素(最小值)。
func (h *CanBeUsedAddrHeap) Pop() interface{}{
old:=*h
*h=old[:len(old)-1]
return old[len(old)-1]
}
// 判断某地址是否在本堆中:不在返回-1,在返回位置
func (h *CanBeUsedAddrHeap) IsExistAddr(addr CanBeUsedAddr) int{
for i := 0; i < len(*h); i++ {
if (*h)[i].ip==addr.ip {
return i
}
}
return -1
}
Binary file not shown.