<>

作者: 凹大猫的鱼 | 来源:发表于2018-09-29 14:55 被阅读0次

数组和切片

切片和数组的区别

1.数组的大小是固定的。

2.切片的底层虽然是数组,但可以随着元素的增多而自动扩大,但不会随着元素减少动态缩减。

3.切片可以看作是对数组的一层简单的封装,底层还是数组。因此切片类型是属于引用类型,引用类型还包括字典类型,通道类型,函数类型等。

数组是属于值类型。结构体,基础类型数据也属于值类型。

注意GO语言对于“传值和传引用”,只要根据被传递的值得类型判断就可以了。从传递的成本上来看,引用比值传递低很多

切片

切片的初始化主要分为用make创建,字面量创建和基于数组/切片创建。

1. s = make([]int,5,8)//创建一个长度为5,容量为8的切片
2. s=make([]int,5)//创建一个长度为5,容量也是5的切片
3. s=[]int{1,2,3,4}//创建一个长度为4,cap为4

s3 := []int{1,2,3,4,5,6,7,8}
s4 := s3[3:6]
fmt.Println(len(s3),cap(s3))
fmt.Println(len(s4),cap(s4))

这种方式的话要注意s4的容量其实是8 - 3 = 5,这个地方还是要注意的,
因为s3的底层数组的长度是8,s4是基于s3的,所以他们的底层数组是相同的,
也就是说s4可以扩展到s3的末尾。但通过s4是永远无法访问到s3前面的元素的。

切片容量的估算

  1. 一般情况下,新的切片会double一下cap。

  2. 如果原切片的长度大于1024,则以cap*1.25倍的增长

  3. 如果追加后的长度大于2倍的cap,则会以lenth为基准(通常会比lenth大一点)

切片的底层数组

切片的底层数组永远都不会被替换!!!!!

apend 返回的是新的切片,如果发生扩容指向的是新的数组,如果没有发生扩容,那么返回的是新的切片指向的是老的数组!!!!!!!!

s = make([]int,5)
s1 := append(s,1)

s1和s是完全不同的两个切片

package main

import "fmt"

func main() {
    s3 := make([]int,5)
    s5 := s3[0:3]
    s4 := append(s3,4)//s4指向了不同的底层数组
    s5 = append(s5,2) //s5指向的和s3一样的底层数组
    s4[0] = 2//s4的变化不影响其它的
    s5[0] = 3 //它会引起s3的变化
    fmt.Println(s3[0])
}

思考题

1.如果多个切片指向同一个底层数组,那么注意什么?

一定要注意你的更改会影响到其它的切片的值!!!!!!!

2.怎么实现切片的缩容

新建数组,然后调用copy函数,然后让切片重新指向新的底层数组!

相关文章

  • <>

    数组和切片 切片和数组的区别 数组是属于值类型。结构体,基础类型数据也属于值类型。 注意GO语言对于“传值和传引用...

  • Go核心36讲笔记

    Part1 .GO 语言安装的时候主要有三个环境变量:GOROOT、GOPATH 和 GOBIN通过 go env...

  • <>

    第一章重点: 该系列主要对郝林老师的课程做个人总结!!!文章在个人git下面,README里面写了郝林老师的课程地...

  • <>

    第二章重点: Go 的源码文件分类: 在第一章的时候已经提及到了这个关键问题: GO语言的flag包: 微课堂主要...

  • <>

    第三章重点: 第三章主要讲的是代码的管理,在第一章里面有的东西已经写进去了,这里按照老师的课程总结一下: 1. 同...

  • <>

    第四章重点: 变量的声明方式 go语言的类型推断有哪些好处 函数重声明的意思 代码块概念: 重声明的前提条件 思考...

  • <>

    第五章重点: 这一章主要是讲了go语言的模块的嵌套和查找规则 思考题 如果我们在go语言查找标识符范围的时候,用了...

  • <>

    第六章重点: go语言数据类型:基础类型(数字,字符串,布尔类型),复合类型(数组,结构体),引用类型(指针,切片...

  • <>

    container里面的容器 主要介绍了list的使用规则,主要重点都是围绕使用来的。注意下面几点即可: 链表的开...

  • <>

    使用函数的正确姿势# 什么是高阶函数? 满足任意一点都可以称为高阶函数!! 闭包的概念 闭包个人了解就是函数和局部...

网友评论

      本文标题:<>

      本文链接:https://www.haomeiwen.com/subject/letboftx.html