java中的数组

数组

数组, 是一个数据容器。 可以存储若干个相兼容的数据类型的数据。

数组定义

1.数组中可以存储基本数据类型的数据, 也可以存储引用数据类型的数据。
2.数组的长度是不可变的,数组的内存空间是连续的。 一个数组一旦实例化完成, 长度不能改变。

简单和引用数据类型比较

1.引用数据类型里面存储的是地址,并且这个地址是十六进制的数.简单数据类型存储的是值,是十进制的。
2.对于简单数据类型,直接在栈区的方法中开辟一块空间存储当前的变量,将要存储的数据直接放在这块空间里。

数组的声明

// 声明一个数组, 存储若干个double类型的数据
double[] array1;
// 声明一个数组, 存储若干个int类型的数据
int[] array2;
// 声明一个数组, 存储若干个String类型的数据
String[] array3;

数组的实例化

// 实例化了一个数组, 可以存储5个数据
// 此时数组中的元素就是默认的5个0
int[] array1 = new int[5];
// 实例化了一个数组, 默认存储的是 1, 2, 3, 4, 5
// 此时数组的长度, 由这些存储的数据的数量可以推算出来为5
int[] array2 = new int[] { 1, 2, 3, 4, 5 };
// 实例化了一个数组, 默认存储的是 1, 2, 3, 4, 5
// 相比较于第二种写法, 省略掉了 new int[]
int[] array3 = { 1, 2, 3, 4, 5 };

数组引用

数组的实例化的时候, 需要使用到关键字new
java中但凡是遇到了new, 都表示在堆上开辟空间!
数组, 其实是在堆上开辟的连续的空间。 例如 new int[5] , 就是在堆上开辟5个连续的4字节空间。
然后, 将堆上的内存地址, 赋值给栈上的变量array(引用)。

数组的下标

下标, 就是数组中的元素在数组中存储的位置索引。
注意: 数组的下标是从0开始的, 即数组中的元素下标范围是 [0, 数组.length - 1]

数组的遍历

数组遍历: 其实就是按照数组中元素存储的顺序, 依次获取到数组中的每一个元素。

  • 下标遍历
  • 增强for循环

如果需要在遍历的同时, 获取到数组中的元素下标, 需要使用下标遍历法。
如果需要在遍历的同时, 修改数组中的元素, 需要使用下标遍历法。
如果仅仅是想要获取数组中的每一个元素, 不需要下标, 也不需要修改数组中的元素,使用增强for循环。 因为这种方式, 遍历的效率比下标遍历法高。

函数和数组的联合应用

函数传参分类

值传递:将保存简单数据的变量作为参数传递
址传递:将保存地址的变量作为参数传递

址传递优点:让我们可以实现使用一个变量一次传递多个值

值传递和址传递比较

通过值作为参数传递,函数内部值的变量不会改变外部的值.
通过地址作为参数传递,函数内部值的变量可以直接改变外部值.

址传递的最终原因是两个变量保存了同一个数组的地址,操作的是同一个数组.

数组的排序

时间复杂度和空间复杂度

排序,即排列顺序,将数组中的元素按照一定的大小关系进行重新排列。
根据时间复杂度和空间复杂度选择排序方法

各算法的时间复杂度
平均时间复杂度
插入排序 O(n2)
冒泡排序 O(n2)
选择排序 O(n2)
快速排序 O(n log n)
堆排序 O(n log n)
归并排序 O(n log n)
基数排序 O(n)
希尔排序 O(n1.25)
复杂度作用:了解了时间复杂度和空间复杂度,可以更好的选择算法,提高排序查找的效率.

  • 选择排序:固定值与其他值依次比较大小,互换位置。
  • 冒泡排序:相邻的两个数值比较大小,互换位置。

数组的查询

数组查询, 即查询数组中的元素出现的下标。

顺序查询

顺序查询, 即遍历数组中的每一个元素, 和要查询的元素进行对比。 如果是要查询的元素,这个下标就是要查询的下标。

查询三要素:
1.我们只找查到的第一个与key相同的元素,查询结束.
2.当查询到与key相同的元素时,返回元素的下标
3.如果没有查询到与key相同的元素,返回-1

二分查询

二分查询, 即利用数组中间的位置, 将数组分为前后两个字表。 如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

二分查询, 要求数组必须是排序的, 否则无法使用二分查询。

二维数组

二维数组, 其实就是数组中嵌套数组。

二维数组中的每一个元素都是一个数组。

理论上来讲, 还可以有三维数组、四维数组, 但是常用的其实就是二维数组。

// 1. 实例化一个二维数组
// 第一个中括号中的3: 二维数组中包含了三个一维数组
// 第二个中括号中的5: 二维数组中的每一个一维数组长度为5
int[][] array = new int[3][5];
// 2. 实例化一个二维数组
// 第一个中括号中的3: 二维数组中包含了三个一维数组
// 第二个中括号中什么都没有,代表现在二维数组中的三个元素是 null
int[][] array2 = new int[3][];
array2[0] = new int[] { 1, 2, 3 };
// 3. 通过初始值实例化一个二维数组
int[][] array3 = { {1, 2, 3}, {1, 2, 3, 4, 5}, {2, 3, 4} };

Arrays工具类

在这里插入图片描述

//从原数组中拷贝指定数量的元素,到一个新的数组中,并返回这个新的数组
// 第一个参数:源数组
// 第二个参数:需要拷贝的元素数量,如果这个数量比源数组长,目标数组剩余的部分补默认值
int[] ret1 = Arrays.copyOf(array, 13);

//从原数组中拷贝指定范围 [from, to) 的元素,到一个新的数组中,并返回这个新的数组
// 第一个参数:源数组
// 第二个参数:起始下标,从这个下标位的元素开始拷贝
// 第三个参数:目标下标,拷贝到这个下标位截止
int[] ret2 = Arrays.copyOfRange(array, array.length, array.length+ 10);

// 判断两个数组是否相同
// 判断的逻辑:长度、每一个元素依次都相等
boolean ret3 = Arrays.equals(ret1, ret2);

// 使用指定的数据,填充数组
// 第一个参数:需要填充的数组
// 第二个参数:填充的数据
Arrays.fill(ret2, 100);

// 对数组进行排序(升序)
Arrays.sort(array);

// 使用二分查找法,到数组中查询指定的元素出现的下标
// 第一个参数:需要查询的数组
// 第二个参数:需要查询的数据
// 返回:这个元素出现的下标,如果不存在,返回-1
int index = Arrays.binarySearch(array, 4);

// 将数组中的元素拼接成字符串返回
String str = Arrays.toString(array);
System.out.println(str);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值