一.数组的概念
在数据结构中数据是这样定义的:数组(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中因为数组为值类型直接赋值即可实现克隆效果。