目录
一、数组理论基础知识
需要两点注意的是
- 数组下标都是从0开始的。
- 数组内存空间的地址是连续的
- 数组是存放在连续地址空间上的相同类型的数据的集合,
- 删除或者增添元素的时候,就难免要移动其他元素的地址。
二、java中数组的使用
数组的两种定义格式:
- 格式1:数据类型[] 变量名;
- 范例: int[] arr;
- 定义了一个int类型的数组,数组名是arr
- 格式2:数据类型 变量名[];
- 范例: int arr[];
- 定义了一个int类型的变量,变量名是arr数组
1.一维数组的初始化
- 所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值
- 注意:数组中的每一个数据,我们称之为数组中的元素
(1)静态初始化格式
- 静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度
- 格式:数据类型[] 变量名 = new 数据类型[]{数据1,数据2,数据3,…};
- 范例:int[] arr = new int[]{1,2,3};
Java
提供了一种简化的格式,让我们使用起来更方便
- 简化格式:数据类型[] 变量名 = {数据1,数据2,数据3,…};
- 范例:int[] arr = {1,2,3}
(2) 动态初始化格式
- 格式:数据类型[] 变量名 = new 数据类型[数组长度];
- 范例:int[] arr = new int[3]
2.一维数组的元素访问(获取和修改)
- 一个是数组变量的访问方式
- 格式:数组名
- 一个是数组内部保存的数据的访问方式
- 格式:数组名[索引]
索引的注意事项:
- 索引是数组中数据的编号方式
- 作用:用于访问数组中的数据使用,数组名[索引]等同于变量名,是一种特殊的变量名
- 它还有这样的几个特征:
- 特征①:索引从0开始
- 特征②:索引是连续的
- 特征③:索引逐一增加,每次加1
下面进行了元素访问的简单演示:
public class ArrayDemo {
public static void main(String[] args) {
//定义一个数组,并进行初始化 //
int[] scores = {93,96,99};
//输出数组名
System.out.println(scores);
//输出数组中的元素
System.out.println(scores[0]);
System.out.println(scores[1]);
System.out.println(scores[2]);
System.out.println("-----------");
//修改数组中的元素
scores[0] = 100;
scores[1] = 98;
scores[2] = 95;
//再次输出数组中的元素
System.out.println(scores[0]);
System.out.println(scores[1]);
System.out.println(scores[2]);
} }
3.一维数组的常见操作
- 遍历
- 获取最大值
- 元素打乱
(1)数组的遍历
什么是数组遍历:
- 获取数组中的每一个元素,我们可以把获取到的元素输出在控制台
获取数组长度(元素个数):
- 格式:数组名.length
- 范例:arr.length
数组遍历通用格式:
- for (int i = 0; i < scores.length; i++) { scores[i] }
- 注意:数组遍历指的是把数组中的元素取出来,取出来之后可以(打印,求和,判断…)
下面进行数组遍历的简单演示:
public class ArrayTest01 { public static void main(String[] args) {
//定义数组并初始化
int[] arr = {77, 88, 99, 66, 55, 44};
for (int i=0; i<arr.length; i++) {
System.out.println(arr[i]);
} } }
(2)获取最大值
/* 获取最大值 */
public class ArrayTest02 {
public static void main(String[] args) {
//定义数组
int[] arr = {12, 45, 98, 73, 60};
//定义变量max存储最大值,取第一个数据为变量的初始值
int max = arr[0];
//与数组中剩余数据逐个比对,每次比对将最大值保存到变量max中
for (int i=1; i<arr.length; i++) {
if(arr[i] > max) {
max = arr[i]; } }
//循环结束后输出变量max的值
System.out.println("max:" + max);
} }
(3)元素打乱
什么是元素打乱
- 元素打乱就是把数组中的元素随机交换位置,每次运行都可能产生不一样的结果
遍历:
- 正常情况下:12,45,98,73,60
- 元素打乱后:45,73,12,60,98
涉及到的操作:
- 获取数组中元素的随机索引
- Random r = new Random();
- int index = r.nextInt(arr.length);
- 数组中元素交换
import java.util.Random;
/* 元素打乱 */
public class ArrayTest{
//定义数组
int[] arr = {12, 45, 98, 73, 60};
public static void main(String[] args) {
Random r = new Random();
for (int i = 0; i < arr.length; i++) {
int index = r.nextInt(arr.length);
int temp = arr[i];
arr[i] = arr[index];
arr[index] = temp; }
//遍历数组
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]); } } }
4.二维数组的初始化
(1)静态初始化
- 格式:数据类型[] [] 变量名 = new 数据类型[] []{{元素…},{元素…},{元素…},…};
- 范例:int[] [] arr = new int[] []{{1,2,3},{4,5,6},{7,8,9}};
- 简化格式:数据类型[][] 变量名 = {{元素…},{元素…},{元素…},…};
- 范例:int[] [] arr = {{1,2,3},{4,5,6},{7,8,9}};
(2)动态初始化
- 格式:数据类型[] [] 变量名 = new 数据类型[m] [n];
- 范例:int[] [] arr = new int[2] [3];
5.二维数组元素的访问
- 获取二维数组:数组名
- 获取每一个一维数组:数组名[索引]
- 获取每一个二维数组元素:数组名[索引] [索引]
/* 静态初始化简化格式:数据类型[][] 数组名 = {{元素...},{元素...},{元素...},...}; */
public class ArrayDemo {
public static void main(String[] args) {
//静态初始化简化格式:数据类型[][] 数组名 = {{元素...},{元素...},{元素...},...};
int[][] arr = {{1, 2, 3}, {4, 5, 6}};
//输出数组名
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
//如何获取到数据1,2,3呢?
System.out.println(arr[0][0]);
System.out.println(arr[0][1]);
System.out.println(arr[0][2]); } }
6.二维数组的常见操作
- 遍历
- 元素打乱
(1)遍历
public class ArrayTest01 {
public static void main(String[] args) {
//定义二维数组,并进行静态初始化
int[][] arr = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]+" "); }
System.out.println(); } } }
(2)元素打乱
import java.util.Random;
/* 需求:已知二维数组 arr = {{1,2,3},{4,5,6},{7,8,9}};
用程序实现把数组中的元素打乱,并在控制台输出打乱后 的数组元素 */
public class ArrayTest02 {
public static void main(String[] args) {
//定义二维数组,并进行静态初始化
int[][] arr = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
//创建随机数对象
Random r = new Random();
//遍历二维数组,进行元素打乱
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
//arr[i][j]
int x = r.nextInt(arr.length);
int y = r.nextInt(arr[x].length);
//元素交换
int temp = arr[i][j];
arr[i][j] = arr[x][y];
arr[x][y] = temp; } }
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " "); }
System.out.println(); } } }