集合
# 数组
声明时必须指定数组的长度,且长度是数组类型的一部分,因此数组的长度是固定的,不能动态增加或减少。
# 定义
func main() {
var arr1 [3]int
arr1[0] = 1
arr2 := [10]int{1, 2, 3} // 没有赋值的元素默认为0
// 类似于Java中的for循环
for i := 0; i < len(arr1); i++ {
fmt.Println(arr1[i])
}
// 类似于Java中的foreach循环
for index, value := range arr2 {
fmt.Println(index, value)
}
printArray(arr2)
}
func printArray(arr [10]int) {
for index, value := range arr {
fmt.Println(index, value)
}
}
# 存在的问题
- 函数入参为数组时,需要指定数组的长度,如果数组长度不一致,则会报错,因此需要使用切片
- 函数传递数组时,实际上是传递了数组的副本,因此需要使用指针
# Slice(类似 ArrayList)
不指定长度的数组就是 Slice(切片),也就是动态数组
# 定义
func main() {
var slice1 []int
slice2 := []int{1, 2, 3}
// 3表示长度,5表示容量(可选,类似于Java中的ArrayList的初始容量)
slice3 := make([]int, 3, 5)
// 类似于Java中的for循环
for i := 0; i < len(slice1); i++ {
fmt.Println(slice1[i])
}
// 类似于Java中的foreach循环
for index, value := range slice2 {
fmt.Println(index, value)
}
// 类似于Java中的foreach循环
for index, value := range slice3 {
fmt.Println(index, value)
}
}
func printSlice(slice []int) {
for index, value := range slice {
fmt.Println(index, value)
}
}
# 操作
func main() {
slice := []int{1, 2, 3, 4, 5}
// 追加
slice = append(slice, 6)
// 容量,类似于Java中的ArrayList的初始容量,并不是数组的长度
fmt.Println(cap(slice))
// 长度,类似于Java中的ArrayList的size
fmt.Println(len(slice))
// 截取,浅拷贝
fmt.Println(slice[1:3]) // 左闭右开
fmt.Println(slice[1:]) // 从1开始到最后
fmt.Println(slice[:3]) // 从0开始到3
// 深拷贝
slice2 := make([]int, len(slice), cap(slice))
copy(slice2, slice)
}
- 扩容:当 slice 的容量不够时,会自动扩容,扩容为原来的 2 倍
# map(类似 HashMap)
# 定义
func main() {
// 声明方式1
// 类似Map<String, Integer> map1;
var map1 map[string]int // 声明,此时map1为nil
// 类似map1 = new HashMap<>();
map1 = make(map[string]int, 10)
map1["key1"] = 1
map1["key2"] = 2
// 声明方式2
map2 := map[string]int{
"key1": 1,
"key2": 2,
}
// 声明方式3
map3 := make(map[string]int, 10)
}
# 操作
func main() {
map1 := map[string]int{
"key1": 1,
"key2": 2,
}
// 获取
fmt.Println(map1["key1"])
// 删除
delete(map1, "key1")
// 遍历
for key, value := range map1 {
fmt.Println(key, value)
}
// 判断key是否存在
value, ok := map1["key1"]
if ok {
fmt.Println(value)
} else {
fmt.Println("key1不存在")
}
}
上次更新: 2022/12/31, 03:13:11