golang 实现删除切片特定下标元素的方法

  • 要求一:能够实现删除操作就可以。

  • 要求二:考虑使用比较高性能的实现。

  • 要求三:改造为泛型方法

  • 要求四:支持缩容,并旦设计缩容机制。

go 复制代码
package main

import "fmt"

func DeleteAt[T any](slice []T, index int) []T {
	if index < 0 || index > len(slice)-1 {
		panic("index out of range")
	}
	// 前移
	copy(slice[index:], slice[index+1:])
	slice = slice[:len(slice)-1]

	// 缩容
	if cap(slice) >= len(slice)*2 {
		newSlice := make([]T, len(slice))
		copy(newSlice, slice)
		return newSlice
	}
	return slice
}

func main() {
	a := []int{1, 2, 3}
	fmt.Println(DeleteAt(a, 2))
}

高性能操作直接在原切片对元素进行前移,然后截取;如果cap超过len的2倍,则创建一个起始长度容量更小的切片赋值

相关推荐
一只叫煤球的猫1 分钟前
🕰 一个案例带你彻底搞懂延迟双删
java·后端·面试
冒泡的肥皂13 分钟前
MVCC初学demo(一
数据库·后端·mysql
颜如玉1 小时前
ElasticSearch关键参数备忘
后端·elasticsearch·搜索引擎
卡拉叽里呱啦2 小时前
缓存-变更事件捕捉、更新策略、本地缓存和热key问题
分布式·后端·缓存
David爱编程2 小时前
线程调度策略详解:时间片轮转 vs 优先级机制,面试常考!
java·后端
码事漫谈3 小时前
C++继承中的虚函数机制:从单继承到多继承的深度解析
后端
阿冲Runner3 小时前
创建一个生产可用的线程池
java·后端
写bug写bug3 小时前
你真的会用枚举吗
java·后端·设计模式
喵手4 小时前
如何利用Java的Stream API提高代码的简洁度和效率?
java·后端·java ee
掘金码甲哥4 小时前
全网最全的跨域资源共享CORS方案分析
后端