11.Go 列表

列表是一种非连续的存储容器,由多个节点组成,节点通过一些变量记录彼此之间的关系,列表有多种实现方法,如单链表、双链表等。

在Go语言中,列表使用container/list包来实现,内部的实现原理是双链表,列表能够高效地进行任意位置的元素插入和删除操作。

1、列表的创建

list的初始化有两种方法,分别是使用New()函数和var关键字声明。两种方法的初始化效果是相同的。

  • 通过container/list包的New()函数初始化list,语法:变量名 := list.New()
  • 通过var关键字声明初始化list,语法:var 变量名 list.List

列表与切片和map不同的是,列表并没有具体元素类型的限制,因此,列表的元素可以是任意类型,这既带来了便利,也引来一些问题,例如,给列表中放入了一个interface{}类型的值,取出值后,如果要将interface{}转换为其他类型,将会发生宕机。

2、插入元素

双链表支持从队列前方或后方插入元素,对应的方法分别是PushFront()和PushBack()。

这两种方法都会返回一个*list.Element结构,如果需要删除插入的元素,则只能通过*list.Element配合Remove()方法进行删除,这种方法可以让删除更加高效,同时也是双链表的特性之一。

l := list.New()
l.PushFront("first")
l.PushBack("second")
3、删除元素

列表插入函数的返回值会提供一个*list.Element结构,这个结构记录着列表元素的值及与其他节点之间的关系等信息,从列表中删除元素时,需要用到这个结构进行快速删除。

func main() {l := list.New()l.PushFront("first ")l.PushBack("second ")// 尾部添加后保存元素句柄element := l.PushBack("third ")// 在 third之后添加highl.InsertAfter("high ", element)// 在 third之前添加lowl.InsertBefore("low ", element)// 删除 elementl.Remove(element)for i := l.Front(); i != nil; i = i.Next() {fmt.Print(i.Value) // first second low high}
}

4、列表的遍历

遍历双链表需要配合Front()函数获取头元素,遍历时只要元素不为空就可以继续进行,每次遍历都会调用元素的Next()函数,例如:

func main() {l := list.New()l.PushFront("first ")l.PushBack("second ")for i := l.Front(); i != nil; i = i.Next() {fmt.Print(i.Value) // first second low high}
}

  • 使用for语句进行遍历,其中i:=l.Front()表示初始赋值,只会在一开始执行一次,每次循环会进行一次i != nil语句判断,如果返回false,表示退出循环,反之则会执行i = i.Next()。
  • 使用遍历返回的*list.Element的Value成员取得放入列表时的原值。
5、复合数据类型总结

(1)Go语言中切片用来处理数据的集合,映射用来处理具有键值对结构的数据。

(2)内置函数make()可以创建切片和映射,并指定原始的长度和容量。也可以直接使用切片和映射字面量,或者使用字面量作为变量的初始值。切片有容量限制,不过可以使用内置的append()函数扩展容量。映射的增长没有容量或者任何限制。

(3)内置函数len()可以用来获取切片或者映射的长度,内置函数cap()只能用于切片,通过组合,可以创建多维数组和多维切片,也可以使用切片或者其他映射作为映射的值,但是切片不能用作映射的键。将切片或者映射传递给函数的成本很小,并且不会复制底层的数据结构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

物理模拟重力 斜抛运动计算 抛物线计算

物理模拟重力 斜抛运动计算 抛物线计算 一、介绍二、原理三、实现如下PhysicsUtil.cs 工具类Missile.cs 四、资源分享 一、介绍 模拟Unity原始重力系统进行重写,可是实现发射到指定目标位置并能继续当前力进行自身的弹力与摩擦继续运动 二、原理 将Unity原始不受控…

Linux常用命令(一):Conda、RPM、文件权限、apt-get(更新中...

文章目录 一、Conda二、RPM三、文件权限四、apt-get 一、Conda Conda是一个开源的软件包管理系统和环境管理系统,用于安装和管理软件包及其依赖项。它主要用于Python编程语言,但也可以用于其他语言的项目。Conda可以帮助用户创建不同版本的Python环境&a…

​一个人成长最快的方式

一个人成长最快的方式就是:保持阅读,向行业的专家学习,在实践中不断的复盘总结,循环这三点,没有学不好的东西。基于此,推荐一些在产品、设计领域的专家,关注他们,学习他们&#xff0…

springcloud 服务网关Zuul实战(二)路由访问映射规则

上篇文中已经讲完基本的路由配置,但是我们如何对访问的微服务做映射 访问的地址:http://myzuul.com:9527/microservicecloud-dept/dept/get/2 从访问地址可以分析出我们真实的微服务名字,我们为了安全起见将真实的微服务名字隐藏&#xff0…

B端 — 卡片式列表设计

作者:Nick(转载已取得作者授权)卡片式列表是一种很好的集合信息的方式,它既有好处也有弊端,因此需要根据场景和内容确定展现形式。本文结合了案例与大家分享一下卡片式列表设计的一些思考。一、定义1. 什么是卡片物理世…

隐藏文件或文件夹属性无法修改解决方案

对于无法显示隐藏文件或文件夹的问题,网上的的 控制面板--》文件夹选项 解决方案就不再累述了。接下来是这个问题:可以显示隐藏文件,但是想将隐藏文件或文件夹的隐藏属性去掉,却无法操作。因为右键查看文件属性时,可以…

springcloud config配置中心概述

Spring Cloud Config简介 Spring Cloud Config 是 Spring Cloud 家族中最早的配置中心,虽然后来又发布了 Consul 可以代替配置中心功能,但是 Config 依然适用于 Spring Cloud 项目,通过简单的配置即可实现功能。 配置文件是我们再熟悉不过的…

【计算机四级(网络工程师)笔记】操作系统运行机制

目录 一、中央处理器(CPU) 1.1CPU的状态 1.2指令分类 二、寄存器 2.1寄存器分类 2.2程序状态字(PSW) 三、系统调用 3.1系统调用与一般过程调用的区别 3.2系统调用的分类 四、中断与异常 4.1中断 4.2异常 🌈嗨&#xff…

JAVA中equals()方法的重要性

对于对象比较使用equals()方法的重要性,这里以String类为例进行了比较。 /*** 对于对象比较使用equals()方法的重要性,这里以String类为例进行了比较。* author HAN**/ public class TestEqual {public TestEqual(){testMethod();}void testMethod(){Str…

springcloud config服务端配置(一)

用自己GitHub账号在GitHub上新建一个microservicecloud-config的新的repository 又上一步我们得到了ssh的git地址 gitgithub.com:470812087/microservicecloud-config.git 本地目录新建(F:\JAVA\ideaIU\microservicecloud-config-repository)仓库并…

要求做一个从网页上导入excel

要求做一个从网页上导入excel,,开始着手去实现它。 思路很简单: 1、做一个jsp页面,页面包括浏览文件,提交文件 2、将excel文件上传到服务器 3、 服务器对该excel文件进行读出 4、 将excel文件内容显示到页面上 环境搭…

解决git@github.com: Permission denied (publickey). Could not read from remote repository

原因分析 Permission denied (publickey) 没有权限的publickey ,出现这错误一般是以下两种原因 客户端与服务端未生成 ssh key客户端与服务端的ssh key不匹配 找到问题的原因了,解决办法也就有了,重新生成一次ssh key ,服务端也…

经典Sql大全--转

一、基础 1、说明:创建数据库CREATE DATABASE database-name2、说明:删除数据库drop database dbname3、说明:备份sql server--- 创建 备份数据的 deviceUSE masterEXEC sp_addumpdevice disk, testBack, c:\mssql7backup\MyNwind_1.dat--- 开…

springcloud config服务端配置(二)

接着上一篇把把本地仓库yml文件推送到github之后&#xff0c;下面我们就是实战了&#xff0c;各个微服务如何读取到远程仓库的的yml文件配置 一&#xff0c;新建一个Module模块microservicecloud-config-3344 它即为Cloud配置中心模块 二&#xff0c;pom文件添加依赖 <?xm…

电脑很卡~~~~为什么???

问题&#xff1a;最近电脑不知道为什么&#xff0c;只要连接USB下载或是用QQ视频聊天&#xff0c;电脑就很卡&#xff0c;速度超级慢&#xff0c;连千千静听播放的速度都很慢&#xff0c;唱的歌都是断断续续的&#xff01; 用杀毒软件又查不到毒&#xff0c;漏洞全补好了&#…

循环队列CircleQueue的使用

循环队列CircleQueue 的使用 循环队列是实际编写应用中比较重要的一种数据结构&#xff0c;下面介绍在实际项目中用到的循环队列CircleQueue。它是用C编写的&#xff0c;具体源代码见 https://github.com/duankai/CircleQueue template<typenameAnyData> struct DATA_NOD…

C4996    'fopen': This function or variable may be unsafe

C4996 fopen: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 在工程文件处右击&#xff0c;选择属性->配置属性->C/C->预处理器 加入一个_CR…

atmega8 例程:USART串口通信

/***************************************************************** * 函数库说明&#xff1a;ATMEGA8 串口通信 * 版本&#xff1a; v1.0 * 修改&#xff1a; 庞辉 芜湖联大飞思卡尔工作室 …

排序二叉树 SortBinaryTree

排序二叉树 SortBinaryTree 排序二叉树是比较基本但是重要的算法,它在许多实际编码中都不可缺少&#xff0c;还有不少算法和数据结构都基于此。比如&#xff0c;二叉查找树&#xff0c;平衡二叉树&#xff0c;红黑树等等。 SortBinaryTree的源代码见: https://github.com/…

使用postman操作ElasticSearch

下载安装好postman之后 添加索引blog1&#xff08;因为ElasticSearch是restful请求所以我们用postman发送http请求给ElasticSearch&#xff09; { "mappings":{ "article":{ "properties":{ "i…