java基础学习笔记(二)数组部分

时间:2022-11-17 08:57:32


文章目录

  • ​​数组​​
  • ​​定义数组​​
  • ​​数组使用​​
  • ​​数组在内存中分析​​
  • ​​tips​​
  • ​​引用数据类型​​
  • ​​数组与循环​​
  • ​​数组和方法的关系​​
  • ​​数组算法例题​​

数组

定义数组

数据类型[] 数组名 = new 数据类型[容量];

直接定义型:数据类型[] 数组名 = {1,2,3,4,5,6,7}

赋值左侧
数据类型:
告知编译器,当前数组中能够保存的数据类型是什么,定义之后,整个数组中保存的数据类型不能修改!

[]:
1. 告知编译器这里定义的是一个数组类型数据
2. 明确告知编译器,数组名是一个引用数据类型

数组名:
1. 操作数据非常重要
2. 数组名是一个引用数据类型

赋值右侧
new:
申请[xx]内存空间,并且清空整个内存空间中所有二进制位,所有的二进制位都是0
数据类型:
前后呼应,告知编译器此处支持存储的数据类型是什么
[容量]:
容量=>capacity
告知编译器,当前数组中能够存放的对应数据类型的数据,最大存储为多少
[注意]
一定确定容量,针对于当前数组,后期容量无法修改

新建数组,数组内默认值全为0

java基础学习笔记(二)数组部分

数组使用

java基础学习笔记(二)数组部分

  • 数组中的每个数据格被称为"数组元素"
  • 对每个元素进行赋值或取值的操作被称为"元素的访问"
  • 访问元素时,需要使用"下标"(从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]);
}
}

java基础学习笔记(二)数组部分

编译过程中不会出现报错提示,在运行代码时,代码出现问题,这种异常叫做RuntimeException,运行时异常

数组在内存中分析

  • 栈区空间系统分配系统释放
  • 堆区程序员分配,java释放,或者程序员释放

引用数据类型保存的是另一个空间的首地址

java基础学习笔记(二)数组部分

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]);
}
}

java基础学习笔记(二)数组部分

java基础学习笔记(二)数组部分

原来的arr1会变成游离无主内存,会被jvm回收掉

数组与循环

获取数组容量

数组名.length  属性

数组占用的空间比存储数据计算空间略大的原因:数组的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]);
}
}
}

java基础学习笔记(二)数组部分

数组和方法的关系

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]);
}
}
}

java基础学习笔记(二)数组部分

数组算法例题

这部分单独一部分
数组算法例题
1.数组逆序
2.找出数组中最大值所在下标位置
3.找出数组中指定元素第一次出现的下标位置
4.在数组中找出指定下标对应的元素
5.找出指定元素在数组中最后一次出现位置
6.找到元素在指定数组中的所有下标位置
7.在指定位置插入指定元素
8.删除数组中指定下标的元素
9.冒泡排序算法
10.选择排序