八、 数组(重点)

本文详细介绍了Java中的数组,包括定义、初始化、访问、遍历、操作案例以及数组复制的方法,如`System.arraycopy()`。文章通过实例展示了如何创建、访问和操作数组,包括生成随机数组并正序和逆序输出,以及找出数组中的最大值。
摘要由CSDN通过智能技术生成

在这里插入图片描述

8.1 什么是数组

  • 程序=算法+数据结构

  • 数据结构:把数据按照某个特定的结构存储,设计一个合理的数据结构是数据问题的关键。(存储数据的结构)

  • 数组:最基本的数据结构(本质–存储同类型的元素的集合)

  • 数组特定结构:相同类型组成的数据集合下标

  • 表现方式:通过元素的下标进行访问,且下标从0开始,最大元素下标为数组长度。

/**
 * 数组
 * @author Regulus
 */
public class Testarray {
	public static void main(String[] args) {
		//1.我的第一个数组
		int[] arr = {1,2,3,4};
		System.out.println(arr.length);//数组长度
		System.out.println(Arrays.toString(arr));  //以字符串的形式打印数组
		//2.数组的遍历
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i]);
		}
	}
}

8.2 数组的定义

8.2.1 声明数组的三种方法

数据类型[] 数组名 = new 数据类型[数组长度]

int[] arr1 = new int[5];
说明:
int:数组的元素类型必须为int
arr1:数组的名称
new:创建了一个数组对象
5:数组的长度

1.初始值为int的默认值
2.元素为{0,0,0,0,0}

8.3 数组的初始化

8.3.1 基本类型数组的创建其元素值是数组类型决定的

  • 整型:0
  • 浮点型:0.0
  • 字符型:空字符 – “\0”
  • 布尔型:false

8.3.2 数组的初始化

数据类型[] 数组名 = new 数据类型[数组长度]

int[] arr1 = new int[5];

数据类型[] 数组名 = new 数据类型[]{元素数据}

int[] arr2 = new int[]{0,1,2,3};

数据类型[] 数组名 = {元素数据}

int[] arr3 = {0,1,2,3,4};直接初始化元素值,长度为元素的个数

1.这种声明只能对其初始化不能用于赋值
2.编译错误:

public static void main(String[] args) {
 //错误(没有new一个空间就开始赋值)
 int[] arr3;
 arr3= {0,1,2,3,4};
 
 //正确
 int[] arr2 = {0,1,2,3,4};
 int[] arr3 = new int[5];
 arr3[0]=0;
 arr3[1]=1;
 arr3[2]=2;
 arr3[3]=3;
 arr3[4]=4;
}

3.对数组的赋值只是对其元素进行赋值,不能对数组定义赋值。
4.可以采用第二种方式先用new创建空间,再赋值arr = new []{1,2,3,4};

8.4 数组的访问

8.4.1 获取数组的长度

//获取数组的长度
int a[] = new int[]{3,4,5,6};
int len =a.length;      //数组的,length 属性
System.out.println(len);//4

8.4.2 通过下标访问数组元素

//通过下标访问数组元素
int[] b = {4,6,9,8,7};//b[0] b[1] b[2]...b[4]
//0.获取最后一位元素值。
System.out.println(b[b.length-1]);//7
System.out.println("-------");
//1.获取元素下标为奇数的元素
//循环问题 条件:数组的长度 变量:第一个元素 改变条件:%2==1
for (int i = 0; i < b.length; i++) {
    if(i % 2 == 1) {
        System.out.println(b[i]);
    }
}

//2.交换元素下标为2和3的元素位置
int temp = b[2];
b[2] = b[3];
b[3] = temp;
System.out.println(b[2]);
System.out.println(b[3]);

8.4.3 遍历数组元素–for循环

基本for循环

int[] a2 = new int[]{3,6,7,9};
//基本for循环
for (int i = 0; i < a2.length; i++) {
    System.out.print(a2[i] + " ");
    }

增强for循环

int[] a2 = new int[]{3,6,7,9};
//jdk1.8提供了增强for循环
for (int i : a2) {
    System.out.print(i+" ");
    }

8.4.4 案例(产生一个随机数组,元素个数为10,将数组正序和逆序输出)

//1.定义数组,长度为自定义=l
		System.out.println("输入数组的长度:");
		Scanner scan = new Scanner(System.in);
		int l = scan.nextInt();
		int []arr = new int[l];
//2.通过元素下标赋值随机数
for (int i = 0; i < num.length; i++) {
    //arr[i] = (int)(Math.random()*100);
    Random ran = new Random(); //生成随机数
    num[i] = ran.nextInt(100); //生成一个随机的int值,该值介于[0,100)的区间
    }
//3.正序遍历
for (int i = 0; i < num.length; i++) {
    System.out.print(num[i] + " ");
    }
System.out.println();
//4.逆序遍历
for (int i = num.length-1; i >= 0; i--) {
    System.out.print(num[i] + " ");
    }

8.4.5 案例(求出数组中的最大值)

//求数组最大值
public static void main(String[] args) {
		int num[] = new int[]{3,4,5,6};
	    int max=0;
		for (int i = 0;i<num.length;i++){
		    if(max < num[i]){
		        max = num[i];
		    }
		}
		System.out.println(max);
}

8.5 数组的复制

8.5.1 System.arraycopy()方法

public static void arrayCopy(Object src,int srcPos,Object dest,int desPos,int length)
  • src:原数组
  • srcPos:原数组的起始位置
  • dest:目标数组
  • destPos:目标数组的起始位置
  • length: 复制的长度

在import java.util.Arrays;包中实现

//数组的复制
public static void main(String[] args) {
		int [] c1= {1,2,3,4,5,6};
		int [] c2=new int[6];
		System.arraycopy(c1,1,c2,0,3);
		System.out.println(Arrays.toString(c2));   //[2, 3, 4, 0, 0, 0]
	}

如果目标数组小于需要copy的长度时会报出ArraysIndexOutOfBoundsException

8.5.2 System.arraycopyOf()方法

java.util.Array类实现了数组复制的方法Array.copyOf(类型[]src,int length)

  • srcL:源数组
  • length:复制的长度
public static void main(String[] args) {
		int [] c1= {1,2,3,4};
		int [] c2=new int[4];
		System.out.println("s:"+c1.length);   //4
  
		c2 = Arrays.copyOf(c1,3);
		System.out.println(Arrays.toString(c2));   //截取 [1, 2, 3]
		
		c2 = Arrays.copyOf(c1,6);
		System.out.println(Arrays.toString(c2));   //扩容 [1, 2, 3, 4, 0, 0]
		
		System.out.println("t:"+c1.length);   //3
	}

总结:
当复制的长度小于新数值,则截取;
当复制的长度大于新数值,则扩容。

public static void main(String[] args) {
		int []arr = {1,2,3,4,5,6,7,8,9};
		System.out.println(Arrays.toString(arr));
		int temp = arr[2];
		arr[2] = arr[arr.length-1];
		arr[arr.length-1] = temp;
		arr = Arrays.copyOf(arr, arr.length-1);
		System.out.println(Arrays.toString(arr));
	}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值