GO语言基础知识(五.数组与多维数组)

一.数组的概念

       在数据结构中数据是这样定义的:数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。(长度一旦确定就无法修改

        用通俗的话来说数组是一个存放一组相同数据类型的容器。

        多维数组:多维数据是一种嵌套数组,即数组里面套数组

二.数组的使用

1.java中数组的使用

package org.example;

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        // 数组的声明
        String[] strArray = new String[]{"xiaoDuanYu", "男", "23"};
        int[] intArray = new int[]{1, 2, 3, 6, 8, 9, 12, 4, 5};

        //数组的遍历
        for (int i = 0; i < strArray.length; i++) {
            System.out.println(strArray[i]);
        }

        // 数组为引用数据类型,当复制给另一个对象时,改变数组的值同时会影响原来的值
        String[] strings = strArray;
        strings[0] = "XiaoDuanYu";
        System.out.println(Arrays.toString(strings));
        System.out.println(Arrays.toString(strArray));

        //数组克隆方法
        // 基本数据类型的克隆方法为深度克隆,当克隆后的数组发生改变,不会影响原来的数组
        // 对象类型的数组克隆方法为浅克隆,当克隆后的数组发生改变,会影响原来的数组
        int[] intArray2 = intArray.clone();
        intArray2[0] = 0;
        System.out.println(Arrays.toString(intArray));
        System.out.println(Arrays.toString(intArray2));

        //多维数组
        String[][] stringArrays = new String[][]{
                {"吃饭", "yes"},
                {"睡觉", "yes"},
                {"上班", "no"}
        };
        //多维数组遍历
        for (int i = 0; i < stringArrays.length; i++) {
            for(String str : stringArrays[i]) {
                System.out.println(str);
            }
        }
    }
}

2.golang中数组的使用

package main

import "fmt"

func main() {
	//指定数组的大小
	var strArray = [3]string{"xiaoDuanYu", "男", "23"}
	fmt.Printf("类型为%T,值为%v\n", strArray, strArray)

	// 使用自动推导大小来定义数组
	var intArray = [...]int{1, 2, 3, 6, 8, 9, 12, 4, 5}
	fmt.Printf("类型为%T,值为%v\n", intArray, intArray)

	//遍历数组
	for _, value := range strArray {
		fmt.Println(value)
	}

	for i := 0; i < len(intArray); i++ {
		fmt.Println(intArray[i])
	}

	// golang中数组为值类型,当改变第二个数组的值时不会影响第一个数组
	// 这一点golang与java不一致,切勿记混
	strArray2 := strArray
	strArray2[0] = "XiaoDuanYu"
	fmt.Printf("类型为%T,值为%v\n", strArray, strArray)
	fmt.Printf("类型为%T,值为%v\n", strArray2, strArray2)

	// 多维数组
	// 多维数组只有第一层能使用...自动推导大小,内部数组不可以
	var stringArrays = [...][2]string{
		{"吃饭", "yes"},
		{"睡觉", "yes"},
		{"上班", "no"},
	}
	fmt.Printf("类型为%T,值为%v\n", stringArrays, stringArrays)
	//多维数组遍历
	for i := 0; i < len(stringArrays); i++ {
		for j := 0; j < len(stringArrays[i]); j++ {
			fmt.Println(stringArrays[i][j])
		}
	}

	for _, array := range stringArrays {
		for _, value := range array {
			fmt.Println(value)
		}
	}
}

3.java与golang数组的区别 

        在java中数组为引用数据类型,而在golang中数组为值类型

        在java中定义数组数组大小不是必填,而在golang中数组的大小必填,不填大小也必须采用...来进行数组大小的自动推导。

        在java中存在数组克隆方法,且基本数据类型的数组克隆为深度克隆,而引用类型的数组克隆为浅克隆,在golang中因为数组为值类型直接赋值即可实现克隆效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值