欢迎来到[自学php网] ①群 287460651

主页 > 专题教程 > go语言 >

golang slice 与list 的性能分析。go语言教程

来源:未知    时间:2018-08-31 17:36 作者:小飞侠

[导读] 一 · 比较slice 与 list 遍历创建和添加元素速度。 packagemainimport(timefmtcontainer/list)funcmain(){t:=time.Now()sli:=make([]int,10)fori:=0;i1*100000*1000;i++{sli=append(sli,1)}fmt.Println(slice创建速度:+time.Now().Sub...

一 · 比较slice 与 list 遍历创建和添加元素速度。


package main
import (
    "time"
    "fmt"
    "container/list"
)
func main() {
    t := time.Now()
    sli:=make([]int ,10)
    for i := 0; i<1*100000*1000;i++  {
    sli=append(sli, 1)
    }
    fmt.Println("slice 创建速度:" + time.Now().Sub(t).String())
    t = time.Now()
    l:=list.New()
    for i := 0; i<1*100000*1000;i++  {
        l.PushBack(1)
    }
    fmt.Println("list 创建速度: " + time.Now().Sub(t).String())


本机运行结果: 

声明:测试结果为个人电脑的测试结果,仅供参考。 

slice 创建速度:1.3029245s 

list 创建速度: 9.7489181s 

对于1亿条数据,slice 的创建和添加元素的速度约是list的7~8倍。


二 · 比较list和slice的遍历速度


package main
import (
    "time"
    "fmt"
    "container/list"
)
func main() {
    sli:=make([]int ,10)
    for i := 0; i<1*100000*1000;i++  {
    sli=append(sli, 1)
    }
    l:=list.New()
    for i := 0; i<1*100000*1000;i++  {
        l.PushBack(1)
    }
    // 比较遍历
    t := time.Now()
    for _,_ = range sli {
        //fmt.Printf("values[%d]=%d\n", i, item)
    }
    fmt.Println("遍历slice的速度:" + time.Now().Sub(t).String())
    t = time.Now()
    for e := l.Front(); e != nil; e = e.Next() {
        //fmt.Println(e.Value)
    }
    fmt.Println("遍历list的速度:" + time.Now().Sub(t).String())
}


本机运行结果: 

遍历slice的速度:32.0235ms 

遍历list的速度:480.3413ms 

对于1亿条数据来讲slice 遍历速度约是list的速度的15倍。


三 · 比较list和slice的插入速度


package main
import (
    "time"
    "fmt"
    "container/list"
)
func main() {
    sli:=make([]int ,10)
    for i := 0; i<1*100000*1000;i++  {
    sli=append(sli, 1)
    }
    l:=list.New()
    for i := 0; i<1*100000*1000;i++  {
        l.PushBack(1)
    }
    //比较插入
    t := time.Now()
    slif:=sli[:100000*500]
    slib:=sli[100000*500:]
    slif=append(slif, 10)
    slif=append(slif, slib...)
    fmt.Println("slice 的插入速度" + time.Now().Sub(t).String())
    var em *list.Element
    len:=l.Len()
    var i int
    for e := l.Front(); e != nil; e = e.Next() {
        i++
        if i ==len/2 {
            em=e
            break
        }
    }
    //忽略掉找中间元素的速度。
    t = time.Now()
    ef:=l.PushBack(2)
    l.MoveBefore(ef,em)
    fmt.Println("list: " + time.Now().Sub(t).String())
}


本机运行结果: 

slice 的插入速度79.054ms 

list 的插入速度 : 0s 

list的插入结果约是list 的”无穷”倍……


总结:对于很多数据来讲:频繁的插入和删除用list,频繁的遍历查询选slice。


最新文章

点击排行

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com