01.02 数组基础

数组简介

数组定义

数组(Array):一种线性表数据结构。它使用一组连续的内存空间,来存储一组具有相同类型的数据。
在这里插入图片描述
线性表:线性表就是所有数据元素排成像一条线一样的结构,线性表上的数据元素都是相同类型,且每个数据元素最多只有前、后两个方向。数组就是一种线性表结构,此外,栈、队列、链表都是线性表结构。
连续的内存空间:线性表有两种存储结构:「顺序存储结构」和「链式存储结构」。其中,「顺序存储结构」是指占用的内存空间是连续的,相邻数据元素之间,物理内存上的存储位置也相邻。数组也是采用了顺序存储结构,并且存储的数据都是相同类型的。
综合这两个角度,数组就可以看做是:使用了「顺序存储结构」的「线性表」的一种实现方式。

随机访问

数组的一个最大特点是:可以进行随机访问。即数组可以根据下标,直接定位到某一个元素存放的位置。
寻址公式如下:下标 i 对应的数据元素地址 = 数据首地址 + i × 单个数据元素所占内存大小。

多维数组

在这里插入图片描述

不同语言实现

在具体的编程语言中,数组这个数据结构的实现方式具有一定差别。

C / C++ 语言中的数组最接近数组结构定义中的数组,使用的是一块存储相同类型数据的、连续的内存空间。不管是基本类型数据,还是结构体、对象,在数组中都是连续存储的。例如:

int arr[3][4] = {{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11}};

Java 中的数组跟数据结构定义中的数组不太一样。Java 中的数组也是存储相同类型数据的,但所使用的内存空间却不一定是连续(多维数组中)。且如果是多维数组,其嵌套数组的长度也可以不同。例如:

int[][] arr = new int[3][]{ {1,2,3}, {4,5}, {6,7,8,9}};

原生 Python 中其实没有数组的概念,而是使用了类似 Java 中的 ArrayList 容器类数据结构,叫做列表。通常我们把列表来作为 Python 中的数组使用。Python 中列表存储的数据类型可以不一致,数组长度也可以不一致。例如:

arr = ['python', 'java', ['asp', 'php'], 'c']

基本操作

我使用Java编程语言,数组定义参考博客: Java数组的基本使用Java数组的5种基本操作一维数组及数组的增、删、查、改

声明数组

// 1动态初始化(指定长度)

String[] aArray = new String[5];
// 其中元素自动拥有默认值。如果是i整数类型,默认为0;如果是浮点类型,默认0.0;如果是字符类型,默认‘\u0000’;如果是布尔类型,默认false;如果是引用类型,默认null。

// 2静态初始化的标准格式(指定内容,不指定长度,自动推算长度)
String[] bArray = new String[]{"a","b","c","d","e"};

// 3静态初始化的省略格式
String[] cArray = {"a","b","c", "d", "e"};
// 存储在堆中,完全等价于String[] cArray = new String[]{"a","b","c", "d", "e"}

// 动态初始化以及静态初始化的标准格式可以拆分成两个步骤
String[] aArray;
aArray = new String[5];
String[] bArray;
bArray = new String[]{"a","b","c","d","e"};

// 静态初始化的省略模式不可以拆分成两个步骤
//	String[] cArray;
//	cArray = {"a","b","c","d","e"}; // 错误

2 获取数组的长度(.length)

String[] aArray = new String[5];
int len = aArray.length;
System.out.println(len) //5;

3 打印数组(Arrays.toString(array))

String[] aArray = new String[]{"a","b","c","d","e"};
String aArrayString = Arrays.toString(aArray);
// 直接打印数组名将输出地址
System.out.println(aArray);
// [I@7150bd4d
System.out.println(aArrayString);
// [a, b, c, d, e]

4 数组元素重排序(Arrays.sort())

int[] array1 = {2, 1, 3, 10, 6};
Arrays.sort(array1);
System.out.println(Arrays.toString(array1));// [1, 2, 3, 6, 10]

String[] array2 = {"bbb", "aaa", "ccc"};
Arrays.sort(array2);
System.out.println(Arrays.toString(array2));// [aaa, bbb, ccc]

// 如果是数值,sort默认按升序从小到大;如果是字符串,sort默认按字母升序

5 判断数组中是否包含某个值

String[] aArray = { "a", "b", "c", "d", "e" };
boolean b = Arrays.asList(aArray).contains("a");
System.out.println(b);
// true

Java容器关系示意图:
在这里插入图片描述

  • 17
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值