Go list 应用解析与实例

list 概述

  • list 是一种非连续存储的容器,由多个节点组成,节点通过一些变量记录彼此直接的关系。
  • Go 语言中list的实现原理是双向链表,list能高兴地进行任意位置元素的插入和删除操作。

Golang的 list 内置库

Golang 的标准库提供高级的数据结构List,具体位置在 container/list/list.go 文件中。

  • container/list 包里注意有两个数据结构类型: ‘Element’ & ‘List’;
  • Element 类型代表双向链表, 相当于 C++ 里的 “iterator”;
  • List 代表一个双向链表,list 零值为一个空的、可用的链表;
  • Element 有 Prev 和 Next 方法用于获取上一个、下一个 element 元素,element 可用直接调用value属性。

Element & List 方法集

1、 type Element

  • func (e *Element) Next() *Element
  • func (3 *Element) Prev() *Element

2、 type List

  • func New() *List
  • func (l *List) Init() *List
  • func (l *List) Len() int
  • func (l *List) Front() || Back() *Element //描述 front 与Back 方法
  • func (l *List) PushFront(v interface{}) || PushBack(v interface{}) *Element
  • func (l *List) PushFrontList(other *List) || PushBackList(other *List) *Element
  • func (l *List) InsertBefore(v interface{},mark *Element) || InsertAfter(v interface{},mark *Element) *Element
  • func (l *List) MoveToFront(e *Element) || MoveToBack(e *Element)
  • func (l *List) MoveBefore(e,mark *Element) ||MoveAfter(e,mark *Element)
  • func (l *List) Remove(e *Element) interface{}

list 声明

lis := list.New()
var lis list.List

在 C++ 里面,list的成员必须是同一个类型数据,而Go语言中却可用插入任意类型的成员。

lsit 遍历

for e := lis.Front; e != nil; e = e.Next() {
	fmt.Println(e.Value)
}

for n := lis.Back(); n != nil; n = n.Prev() {
	fmt.Println(n.Value)
}

实例 1


package main

import (
        "fmt"
        "container/list"
)

func main() {
        copyList()
}


func printListInfo(info string, lis *list.List) {
        fmt.Println(info + "-------")
        fmt.Printf("%T : %v \t, length: %d \n",lis,lis,lis.Len())
        fmt.Printf("\n\r")
}

func iteraterList(lis *list.List) {
        i := 0
        for e := lis.Front(); e != nil; e = e.Next() {
                i++
                fmt.Printf(" %d : %v \t", i, e.Value)
        }
        fmt.Println("\n\r","--------end-------")
}

func copyList() {
        list1 := list.New()
        
        printListInfo("declare:",list1)
        list1.PushBack("one")
        list1.PushBack("2")
        list1.PushFront("first")
        list1.PushBack("three")
        
        printListInfo("declare1: ",list1)
        iteraterList(list1)
}

运行效果如下:

robot@ubuntu:~/gomod/src/list$ go run elist.go 
declare:-------
*list.List : &{{0xc00005e150 0xc00005e150 <nil> <nil>} 0} 	, length: 0 

declare1: -------
*list.List : &{{0xc00005e210 0xc00005e240 <nil> <nil>} 4} 	, length: 4 

 1 : first 	 2 : one 	 3 : 2 	 4 : three 	
 --------end-------

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ArrayList是Java中的一个动态数组类,它提供了一种方便的方式来存储和操作数据。下面是一个ArrayList应用实例: 假设我们要编写一个学生管理系统,需要存储学生的信息,包括姓名、年龄和成绩。我们可以使用ArrayList来存储学生对象,并进行相关操作。 首先,我们定义一个Student类,包含姓名、年龄和成绩属性,并提供相应的getter和setter方法。 ```java public class Student { private String name; private int age; private double score; public Student(String name, int age, double score) { this.name = name; this.age = age; this.score = score; } // getter和setter方法省略... } ``` 然后,在主程序中创建一个ArrayList对象,并添加学生信息: ```java import java.util.ArrayList; public class Main { public static void main(String[] args) { ArrayList<Student> studentList = new ArrayList<>(); // 添加学生信息 studentList.add(new Student("张三", 18, 90.5)); studentList.add(new Student("李四", 20, 85.0)); studentList.add(new Student("王五", 19, 92.0)); // 输出学生信息 for (Student student : studentList) { System.out.println("姓名:" + student.getName()); System.out.println("年龄:" + student.getAge()); System.out.println("成绩:" + student.getScore()); System.out.println("--"); } } } ``` 以上代码创建了一个ArrayList对象studentList,并使用add方法添加了三个学生对象。然后,通过遍历ArrayList,输出每个学生的姓名、年龄和成绩。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值