Java 一维数组(超详解)

本文详细解析了Java中数组的内存分配,包括堆、栈、方法区等,并通过实例展示了单个数组、两个数组以及变量与数组的关系。同时,列举了使用数组时常见的ArrayIndexOutOfBoundsException和NullPointerException错误。此外,还介绍了数组的遍历、获取最值、基本查找、反转和排序等操作,涉及选择排序和冒泡排序两种算法。
摘要由CSDN通过智能技术生成

1.数组
数组的内存图?
Java的内存分配?
*堆
*栈
*方法区
本地方法栈
寄存器

	一个数组的内存图?
		int[] arr = new int[3];
		arr[0] = 12;
		arr[2] = 14;
		System.out.println(arr[0]);//12
		System.out.println(arr[1]);//0
		System.out.println(arr[2]);//14
		System.out.println(arr);//[I@7852e922

二个数组的内存图?

		int[] arr1 = new int[]{23,12,5};
		System.out.println(arr1[0]);
		System.out.println(arr1[1]);
		System.out.println(arr1[2]);
		System.out.println(arr1);
		arr1[0] = 13;
		System.out.println(arr1[0]);
		
		int[] arr2 = {14,18,15};
		System.out.println(arr2[0]);
		System.out.println(arr2[1]);
		System.out.println(arr2[2]);
		System.out.println(arr2);
		arr2[1] = 12;
		System.out.println(arr2[1]);

一个变量两个数组容器的内存图?

		int[] arr = new int[3];
		System.out.println(arr[0]);
		arr[0] = 3;
		System.out.println(arr[0]);
		System.out.println(arr);
		
		arr = new int[5];
		System.out.println(arr[0]);
		arr[0] = 5;
		System.out.println(arr[0]);
		System.out.println(arr);

两个变量指向一个数组容器的内存图?

		int[] arr1 = new int[3];
		System.out.println(arr1[0]);
		arr1[0] = 12;
		System.out.println(arr1[0]);
		System.out.println(arr1);
		
		int[] arr2 = arr1;
		System.out.println(arr2[0]);
		arr2[0] = 13;
		System.out.println(arr2[0]);
		System.out.println(arr2);
		
		System.out.println(arr1[0]);

我们在使用数组的时候经常遇到的两个错误?

	1.ArrayIndexOutOfBoundsException(数组索引越界异常)
		int[] arr = new int[3];
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println(arr[2]);
		System.out.println(arr[3]);//这一行会引发数组索引越界异常,因为数组中根本没有3索引
		
	2.NullPointerException(空指针异常)
		int[] arr = {12,14,13};
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println(arr[2]);
		
		arr = null;
		System.out.println(arr[0]);//这一行会引发空指针异常,因为arr的值为null了
		
		
		注意:null是空常量,只能赋值给引用数据类型的变量
			int[] arr = null;
			String s = null;

数组的常见操作?

	遍历?
		int[] arr = {1,2,3,4,5};
		for(int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
		
	获取最值?
		方式一:
			int[] arr = {3,5,2,1,4};
		
			int max = arr[0];//记录的是元素
			
			for(int i = 1; i < arr.length; i++) {
				if(max < arr[i]) {
					max = arr[i];
				}
			}
			
			System.out.println(max);
		
		方式二:
			int[] arr = {3,5,2,1,4};
	
			int max = 0;//记录的是索引
			
			for(int i = 1; i < arr.length; i++) {
				if(arr[max] < arr[i]) {
					max = i;
				}
			}
			
			System.out.println(arr[max]);
			
	基本查找?
		Scanner sc = new Scanner(System.in);
	
		System.out.println("请您输入一个数字:");
		int num = sc.nextInt();
		
		int[] arr = {12, 4, 13, 10, 1};
		
		boolean b = false;//false代表没找到,true代表找到了
		int index = -1;
		
		for(int i = 0; i < arr.length; i++) {
			if(arr[i] == num) {
				b = true;
				index = i;
				break;
			}
		}
		
		if(b) {
			System.out.println("找到了");
		} else {
			System.out.println("没找到");
		}
		
		System.out.println(index);

数组的反转?

		反转前:{1,2,3,4,5}
		反转后:{5,4,3,2,1}
		
		方式一:
			int[] arr = {1,2,3,4,5};
	
			//反转前:
			for (int i = 0; i < arr.length; i++) {
				System.out.print(arr[i] + " ");
			}
			
			System.out.println();
			
			for(int i = 0; i < arr.length/2; i++) {
				int temp = arr[i];
				arr[i] = arr[arr.length-1-i];
				arr[arr.length-1-i] = temp;
			}
			
			//反转后:
			for (int i = 0; i < arr.length; i++) {
				System.out.print(arr[i] + " ");
			}
		
		方式二:
			for(int i = 0, j = arr.length - 1; i < arr.length / 2; i++, j--) {
				int temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}
			
	排序?
		排序前:{4,1,5,3,2}
		排序后:{1,2,3,4,5}
		
		方式一:选择排序
			int[] arr = {4,1,5,3,2,9};
	
			//排序前:
			for (int i = 0; i < arr.length; i++) {
				System.out.print(arr[i] + " ");
			}
			System.out.println();
			
			for(int i = 0; i < arr.length - 1; i++) {
				for(int j = i + 1; j < arr.length; j++) {
					if(arr[i] > arr[j]) {
						int temp = arr[i];
						arr[i] = arr[j];
						arr[j] = temp;
					}
				}
			}
			
			//排序后:
			for (int i = 0; i < arr.length; i++) {
				System.out.print(arr[i] + " ");
			}
		
		方式二:冒泡排序
			int[] arr = {4, 1, 5, 3, 2};
	
			for (int i = 0; i < arr.length; i++) {
				System.out.print(arr[i] + " ");
			}
			System.out.println();
			
			for(int i = 0; i < arr.length - 1; i++) {
				for(int j = 0; j < arr.length-1-i; j++) {
					if(arr[j] > arr[j+1]) {
						int temp = arr[j];
						arr[j] = arr[j+1];
						arr[j+1] = temp;
					}
				}
			}
		
			for (int i = 0; i < arr.length; i++) {
				System.out.print(arr[i] + " ");
			}
			System.out.println();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜龙的小博站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值