前序
今天继续总结的是go语言中的一些数据结构,包括:
- 切片(slice)
- 集合(Map)
切片
切片可以理解成动态数组,没有固定长度,可以通过增加切片容量来增加元素
一个切片在未初始化之前默认为 nil,长度为 0
定义切片
切片不需要说明长度,可使用 make() 函数来创建切片:
//复制代码
var slice1 []type = make([]type, len)
//也可以简写为
slice1 := make([]type, len,capcity)
切片初始化
直接初始化切片,[] 表示是切片类型, {1,2,3} 初始化值依次是 1,2,3,其 cap=len=3。
s :=[] int {1,2,3 }
切片函数操作
可以通过设置下限及上限来设置截取切片 [lower-bound:upper-bound] ,实例如下:
package main
import "fmt"
func main() {
/* 创建切片 */
numbers := []int{0,1,2,3,4,5,6,7,8}
/* 打印子切片从索引1(包含) 到索引4(不包含)*/
fmt.Println("numbers[1:4] ==", numbers[1:4])
如果想增加切片的容量,我们必须创建一个新的更大的切片并把原分片的内容都拷贝过来。
下面的代码描述了从拷贝切片的 copy 方法和向切片追加新元素的 append 方法。
package main
import "fmt"
func main() {
var numbers []int
/* 向切片添加多个元素 */
numbers = append(numbers, 1, 2)
/* 创建切片 numbers1 是之前切片的两倍容量*/
numbers1 := make([]int, len(numbers), (cap(numbers))*2)
/* 拷贝 numbers 的内容到 number1 */
copy(numbers1,numbers)
printSlice(numbers1)
}
集合(Map)
Map 是一种无序的键值对的集合。
Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。
定义集合
可以使用内建函数 make 或使用 map 关键字来定义 Map:
/* 使用 make 函数 */
map_variable := make(map[KeyType]ValueType, initialCapacity)
// 使用map创建Map
m := map[string]int{
"apple": 1,
"banana": 2,
"orange": 3,
}
Map的获取就跟java的map没什么区别。