文章目录
- 定义数组
- 数组使用
- 数组在内存中分析
- tips
- 引用数据类型
- 数组与循环
- 数组和方法的关系
- 数组算法例题
数组
定义数组
数据类型[] 数组名 = new 数据类型[容量];
或
直接定义型:数据类型[] 数组名 = {1,2,3,4,5,6,7}
赋值左侧
数据类型:
告知编译器,当前数组中能够保存的数据类型是什么,定义之后,整个数组中保存的数据类型不能修改!
[]:
1. 告知编译器这里定义的是一个数组类型数据
2. 明确告知编译器,数组名是一个引用数据类型
数组名:
1. 操作数据非常重要
2. 数组名是一个引用数据类型
赋值右侧
new:
申请[xx]内存空间,并且清空整个内存空间中所有二进制位,所有的二进制位都是0
数据类型:
前后呼应,告知编译器此处支持存储的数据类型是什么
[容量]:
容量=>capacity
告知编译器,当前数组中能够存放的对应数据类型的数据,最大存储为多少
[注意]
一定确定容量,针对于当前数组,后期容量无法修改
新建数组,数组内默认值全为0
数组使用
- 数组中的每个数据格被称为"数组元素"
- 对每个元素进行赋值或取值的操作被称为"元素的访问"
- 访问元素时,需要使用"下标"(从0开始,依次+1,自动生成)
- 访问的语法:数组名[下标]
数组下标从0开始,到数组的容量-1
超出有效下标范围,都是无效下标,后期考虑数组处理异常问题,负数使用问题
操作会出现的问题
数组下标越界
报错:ArrayIndexOutOfBoundsException
class Demo9 {
public static void main(String[] args) {
int[] arr = new int[10];
arr[0] = 5;
arr[10] = 10;
System.out.println("arr[0]:" + arr[0]);
System.out.println("arr[0]:" + arr[10]);
System.out.println("arr[0]:" + arr[-1]);
}
}
编译过程中不会出现报错提示,在运行代码时,代码出现问题,这种异常叫做RuntimeException,运行时异常
数组在内存中分析
- 栈区空间系统分配系统释放
- 堆区程序员分配,java释放,或者程序员释放
引用数据类型保存的是另一个空间的首地址
栈区中是引用数据类型,存储的是数组的首地址,数组存储在堆区中
tips
论文降低重复率,论文翻译成英语在翻译成其他语言,然后翻译成中文
引用数据类型
开发中引用数据类型,用于保存其他内存空间的首地址,保存地址之后,cpu 可以通过对应的引用数据类型,得到相应的地址,从而访问地址对应内存空间
例:
class Demo10 {
public static void main(String[] args) {
int[] arr1 = new int[10];
int[] arr2 = new int[10];
arr1[5] = 100;
arr2[5] = 200;
System.out.println(arr1[5]);
System.out.println(arr2[5]);
// 这里只是将首地址进行了赋值操作
arr1 = arr2;
arr1[5] = 2000;
System.out.println(arr1[5]);
System.out.println(arr2[5]);
}
}
原来的arr1会变成游离无主内存,会被jvm回收掉
数组与循环
获取数组容量
数组占用的空间比存储数据计算空间略大的原因:数组的length属性是要占用一定数组空间的,属于数组中的内容
class Demo10 {
public static void main(String[] args) {
int[] arr = new int[10];
/**
* 数组赋值
*/
for (int i = 0; i < arr.length; i++) {
arr[i] = i + 1;
}
/**
* 数组打印输出
*/
for (int i = 0; i < arr.length; i++) {
System.out.println("arr[" + i + "]=" + arr[i]);
}
}
}
数组和方法的关系
public static return methodName (arrayType[] arrayName)
arraytName是一个数组类型的变量,引用数据类型的变量,传递的是数组的首地址,所以assignIntArray函数才能成功的进行赋值
class Demo11 {
public static void main(String[] args) {
int[] array = new int[10];
// 调用赋值数组中元素的方法
assignIntArray(array);
// 调用打印数组中元素的方法
printIntArray(array);
}
/**
* 数组赋值
* @param arr
*/
public static void assignIntArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
arr[i] = i + 1;
}
}
/**
* 打印数组
* @param arr
*/
public static void printIntArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.println("arr[" + i + "] = " + arr[i]);
}
}
}
数组算法例题
这部分单独一部分
数组算法例题
1.数组逆序
2.找出数组中最大值所在下标位置
3.找出数组中指定元素第一次出现的下标位置
4.在数组中找出指定下标对应的元素
5.找出指定元素在数组中最后一次出现位置
6.找到元素在指定数组中的所有下标位置
7.在指定位置插入指定元素
8.删除数组中指定下标的元素
9.冒泡排序算法
10.选择排序