java数组使用的好处_java数组的使用

[TOC]

本单元目标

1、数组的特点和好处

2、数组的使用步骤 ★

3、数组的基本使用 ★

求和、求最值、查找、排序

4、数组的复杂使用 ★

赋值、反转

5、数组的高级使用

增删改查

6、二维数组

1、数组的特点和好处

1.1、概念

数组:其实就是一个容器,和变量很像。变量只能保存一个数,而数组可以保存一组数.

1.2、好处

1、同时开辟多个空间,语句更加简洁,且提高效率

2、分类存储,而且数组中的空间都是连续的,所以查找比较方便

1.3、特点

1、数组是多个相同类型数据的组合,实现对这些数据的统一管理

2、数组中的元素可以是任何数据类型,包括基本类型和引用类型(定义)

3、数组属引用类型,数组型数据是对象(object),数组中的每个元素相当于该对象的成员变量

数组名又称为对象名或引用名

注意:引用类型的变量名(也叫对象名)存放在栈中,值(也叫对象)存放在堆中!

基本类型的变量名和值都存放在栈中

568f8c341c13

image

1.4、数组的四要素

1、数组类型

2、数组名(对象名或引用)

3、数组元素(多个)

4、下标(从0开始,到数组的长度-1)

访问数组的元素,不是仅仅通过数组名,而是通过数组名+下标

语法:score[下标]

2、数组的使用步骤

2.1、数组的动态初始化

class ArrayDemo1

{

public static void main(String[] args)

{

//步骤1:声明(仅仅告诉jvm要开辟房间保存多个元素)

//语法:数据类型[] 数组名;或 数据类型 数组名[];

int[] arr;

//步骤2:开辟空间(在堆中开辟指定长度的空间,并且系统自动为每个成员赋予初始值)

//语法:数组名 = new 数据类型[长度];

/*

int 0

double 0.0

char \u0000

boolean false

String null

*/

arr = new int[5];

//可以合二为一

int[] arr2 = new int[5];

//步骤3:手动赋值

arr[0] = 100;//为数组中的第一个成员赋值

arr[1] = 300;//为数组中的第二个成员赋值

arr[2] = 900;//为数组中的第三个成员赋值

//arr[5] = 10000; ArrayIndexOutOfBoundsException

//arr={1,2,3};错误

//步骤4:使用

System.out.println(arr);//[I@7852e922 相当于 地址号

System.out.println(arr[0]);

System.out.println(arr[1]);

System.out.println(arr[1]);

}

}

//此类用于演示数组的动态初始化——赋的值有规律

class Test_

{

public static void main(String[] args)

{

//1.声明并开辟空间

int[] arr = new int[5];

//2.赋值

for(int i=0;i

arr[i] = (int)(Math.random()*100+1);

}

//3.使用

for(int i=0;i

System.out.println(arr[i]);

}

}

}

1、声明

数据类型[] 数组名;或

数据类型 数组名[];

2、开辟空间

数组名 = new 数据类型[长度];//长度必不可少

3、手动赋值

数组名[下标] = 值;

4、使用(打印、运算、判断等)

System.out.println(数组名[下标]);

注意事项:

①数组的元素如果不赋值,也有默认值

int 0

double 0.0

char \u0000

boolean false

引用类型 null

②访问数组的元素时,下标必须在0——长度-1 的范围内,否则报数组下标越界的异常

③数组的长度,可以通过 数组名.length表示,提高代码的维护性

④数组的赋值和使用,往往可以通过搭配for循环一起操作

for(int i=0;i

//每一个元素表示为:数组名[i]

}

案例:

​ 求一个班级10名同学的平均分

import java.util.Scanner;

//此类用于演示数组的动态初始化——赋的值有规律

class Test_

{

public static void main(String[] args)

{

Scanner intput = new Scanner(System.in);

double[] scores = new double[10];

for(int i=0; i

scores[i] = intput.nextDouble();

}

double sum=0;

for(int i=0;i

sum += scores[i];

}

double mean = sum /scores.length;

System.out.println(mean);

}

}

2.2、数组的静态初始化

步骤1:声明并初始化

语法:数据类型[] 数组名 = new 数据类型[]{值,值,值};

或 数据类型[] 数组名 = {值,值,值};

int[] arr = {3,4,5,6,100};

//int[] arr2 = new int[] {3,4,5,6,100};

‘A’+1 转换为66

(char)('A'+1) 转为B

步骤2:使用

for(int i=0;i

//每一个元素表示为:数组名[i]

}

3、数组的基本使用

3.1、数组的最值

class ArrayUtils1

{

public static void main(String[] args)

{

//1.声明并初始化

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

//2.使用:求最大值

//①定义一个max,初始化为第一个元素

int max = arr[0];

int maxIndex = 0;//记录最大值的下标

//②车轮战术,进行和max的pk

for(int i=1;i

if(arr[i]>=max){

max=arr[i];

maxIndex = i;

}

}

//③获取max

System.out.println("最大值:"+max+",下标:"+maxIndex);

}

}

3.2、数组的查找

class ArrayUtils1_2

{

public static void main(String[] args)

{

Scanner input = new Scanner(System.in);

//1.声明并初始化

String[] names = {"白眉鹰王","青易斧王","金毛狮王","紫衫龙王"};

//2.查找

System.out.println("请输入你要查找的名:");

String search = input.next();

//----------------核心的查找------------

/*

查找:线性查找、二分查找

线性查找:依次将数组中的元素提取出来和要查找进行匹配

二分查找:要求待查找的数组已经排好序,查找效率较高

*/

boolean flag = false;

for(int i=0;i

if(names[i].equals(search)){//找到了

System.out.println("找到了,下标是:"+i);

flag = true;

break;

}

}

if(!flag){

System.out.println("没找到");

}

}

}

3.3、数组的排序

568f8c341c13

image

//冒泡排序:每次比较相邻两个数 小的交换到前面 每轮结束后最大的数交换到最后

class ArrayUtils1_3

{

public static void main(String[] args)

{

int[] arr = {2,3,4,1,5};

//排序

/*

i j

0 0 arr[0] vs arr[1]

1 arr[1] vs arr[2]

2 arr[2] vs arr[3]

3 arr[3] vs arr[4]

*/

for(int i=0;i

//循环操作:每一轮发生的事情

for(int j=0;j

//循环操作:每一次发生的事情(比较)

if(arr[j]

//交换两个相邻元素

int temp = arr[j];

arr[j] = arr[j+1];

arr[j+1] = temp;

}

}

}

//打印

for(int i=0;i

System.out.print(arr[i]+"\t");

}

System.out.println();

}

}

4、数组的复杂使用

4.1、数组的赋值

568f8c341c13

image

基本类型的赋值:

int a = 10;

int b = a;//赋值

引用类型的赋值:

int[] arr1={1,2,3};

int[] arr2=arr1;//赋值

特点:

基本类型的赋值,赋的是值(内容),其中一个变量对其更改不影响另外一个

引用类型的赋值,赋的是地址,两个引用共同指向一个地址(对象),所以其中一个引用对其更改影响另外一个

//注意:如果希望引用类型赋值时,只赋内容,则可以使用循环赋值的方式,语法:

int[] array2 = new int[array1.length];

for(int i=0;i

array2[i] = array1[i];

}

4.2、数组的反转

方式一:

for(int i=0;i

//交换两个数 i vs arr.length-1-i

int temp = arr[i];

arr[i] = arr[arr.length-1-i];

arr[arr.length-1-i] = temp;

}

方式二:

//①创建一个新数组,长度=arr.length

int[] newArr = new int[arr.length];

//②逆序赋值

/*

i

0 arr.length-1

1 arr.length-2

*/

for(int i=0,j=arr.length-1;i

newArr[j]=arr[i];

}

//③将新数组的地址赋值给arr

arr=newArr;

5、数组的高级使用

5.1、数组的添加

//----------------具体的添加业务----------

//①新建一个数组,长度=arr.length+1

int[] newArr = new int[arr.length+1];

//②依次为新数组的元素赋值

for(int i=0;i

newArr[i] = arr[i];

}

//③将add赋值到新数组的空位上

newArr[newArr.length-1] = add;

//④将newArr的地址赋值给arr

arr = newArr;

System.out.println("添加成功!");

5.2、数组的插入

class Test_

{

public static void main(String[] args) {

Scanner input = new Scanner(System.in);

int[] arr = {2,3,1,4,6};

for(int i=0;i

System.out.print(arr[i]+"\t");

}

int add = input.nextInt();

int index = input.nextInt();

//1 创建一个新数组 长度 = arr.length+1

int[] new_arr = new int [arr.length+1];

//2 循环赋值

for(int i=0;i

new_arr[i] = arr[i];

}

//3 循环后移

for(int i=new_arr.length-1;i>index;i--) {

new_arr[i] = new_arr[i-1];

}

//4 将新元素赋值到index位置上

new_arr[index] = add;

// 5 将new的数组赋值给arr

arr = new_arr;

for(int i=0;i

System.out.print(arr[i]+"\t");

}

}

}

6、二维数组

6.1、理解

二维数组其实就是 一维数组的组合,也就是一维数组的定义类型又为一维数组

int[][] num;

int[] num[];

int num[][];

6.2、使用步骤

方式一:动态初始化

​ 1.声明

数据类型[][] 数组名;或

数据类型 数组名[][];

数据类型[] 数组名[];

2.开辟空间

情况1:固定列数

数组名 = new 数据类型[行数][列数];

情况2:不固定列数

数组名 = new 数类型[行数][];

3.赋值

情况1:固定列数

for(int i=0;i

for(int j=0;j

nums[i][j]=值;

}

}

情况2:不固定列数

for(int i=0;i

nums[i]=new 数据类型[长度]; //开辟空间

for(int j=0;j

nums[i][j]=值;

}

}

方式二:静态初始化

1.声明并初始化

数据类型[][] 数组名={{},{},{}};

数据类型[][] 数组名=new 数据类型[][]{{},{},{}};

2.使用(打印、求和、最值)

for(int i=0;i

for(int j=0;j

System.out.print(nums[i][j]);

}

}

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值