Java基础---数组内容详解

数组

概念:内存中开辟的一块连续的空间,用来存储有限个相同数据类型的数据

定义格式:
	元素的数据类型[] 数组名称 = new 元素的数据类型[数组长度]
	简化格式:元素的数据类型[] 数组名称 ={值1,值2,值3...};

数组中几个概念:
	元素:数组中的数据
	元素的数据类型:数组中数据的数据类型
	数组名称:数组也是一个变量,打印输出结果如“[I@15db9742” ,是数组的
	         地址值
	数组长度:数组中可以存放的数据的个数
	数组的下标:也叫脚标、索引,从0开始,到数组长度-1

关于直接打印数组所得地址值[I@15db9742的说明:
	[:表示是一维数组
	I:数组类型为Int类型
	@:固定的一个符号
	15db9742:数组内存地址经过hash算法转换得到的一个16进制的数
	
使用数组的必要性:如果没有数组,对于多个变量,就需要声明多个变量的名
称,这些名称之间没有关系和规律可言,发那个文时就比较麻烦;定义数组之
后,可以通过数组中元素的位置数字与数组名称的结合来准确快速地定位每个
数据,方便处理。

数组的访问与赋值:
	数组名[元素的索引] = 元素值;
	数组元素具有默认值:引用数据类型 null
					基本数据类型 
					     整数类型:0
					     小数类型; 0.0
					     字符类型:'\u0000'
					     布尔类型:false

数组中常见的异常

数组下标越界异常:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
   如:int[] arr = new int[3] 
      下标只有0 1 2  却想访问 arr[3]
空指针异常:Exception in thread "main" java.lang.NullPointerException
   如:如:int[] arr = {1,2,3,4} ;
          arr = null;//引用不指向任地址,若坚持访问,则会出现该异常  

数组的内存分析

jvm内存组成部分:栈内存、堆内存、方法区、本地方法区、程序计数器
栈内存:用于执行方法,回味每个方法分配一块空间,称为栈帧,方法的执行
和结束形象地称为进栈(圧栈)和出栈(弹栈)
堆内存:用于存放数组、对象等数据量比较大的数据,一般都是引用数据类型。
方法区:用于存放字节码文件,存储常量和静态变量
本地方法区:用于执行本地方法
程序计数器:用于控制程序的执行

一个数组在内存的中创建过程:方法进栈,创建一个引用,用于存储堆内存内
数组的地址值。

数组的常见操作

数组的遍历:

package com.DaYu;

public class Demo01 {
	public static void main(String[] args) {
		//定义一个数组
		int[] arr = { 12, 23, 43,5, 7, 8, 6, 4, 4 };
        //循环+下标   进行遍历   下标范围 0--->arr.length-1
		for (int i = 0; i <= arr.length - 1; i++) {
			System.out.print(arr[i]);
		}
	}
}
获取数组的最值
package com.DaYu;

public class Demo02 {
    public static void main(String[] args) {
        //定义一个数组
        int[] arr = { 12, 23, 43,5, 7, 8, 6, 4, 4 };
        //声明一个变量,用来记录数组中的最大值
		int max = arr[0];
        //数组遍历
		for (int i = 0; i < arr.length; i++) {
		//将数组中的每个数据都和max进行比较,如果比max还大就替换掉max的值
			if (max < arr[i]) {
				max = arr[i];
			}
		}
		//遍历完数组后,输入max值即为最大值
		System.out.println("数组中的最大值为:" + max);
    } 
}

最小值同理  int min = a[0];  if (a[i]<min)  min = a[i];
数组的反转
方法一:
package com.DaYu;

public class Demo03 {
	public static void main(String[] args) {
		 //定义一个数组
        int[] arr = {1,2,3,4,5,6,7,8,9};
		//调用方法--数组遍历
        arrayBianli(arr);
		int temp;
		//初始时 i为第一个值的下标,j为最后一个值的下标,
        //两者数据进行交换并逐步向中间靠拢
        for (int i = 0, j = arr.length-1; i <j; i++,j--) {
			temp = arr[i];
			arr[i] = arr[j];
			arr[j] = temp;
		}
        //换行、遍历看结果
		System.out.println();
		arrayBianli(arr);
	}
	//将数组的遍历写成一个方法
    public static void arrayBianli(int[] arr) {
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i]+" ");
		}
	}
}

方法二:
package com.DaYu;

public class Demo01 {
	public static void main(String[] args) {
		//定义一个数组
        int[] arr = {1,2,3,4,5,6,7,8,9,10};
		//调用方法--数组遍历
        arrayBianli(arr);
		int temp;
		//找到与i相对应的值的下标arr.length-1-i,两者互换,
        //注意循环变量判断只要到 arr.length/2
        for (int i = 0; i < arr.length/2; i++) {
			temp = arr[arr.length-1-i];
			arr[arr.length-1-i] = arr[i];
			arr[i] = temp;
		}
		//换行、遍历看结果
        System.out.println();
		arrayBianli(arr);
		}
	//将数组的遍历写成一个方法
	public static void arrayBianli(int[] arr) {
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i]+" ");
		}
	}
}
数组元素的查找
判断数组中是否存在某值,若存在则其下标是?
方法一:
package com.DaYu;

import java.util.Scanner;

public class Demo04 {
	public static void main(String[] args) {
		//定义一个数组  
		int[] arr = {1,2,3,4,5,6,7,8,9};
		//键盘输入要查找的值
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入要查找的值");
		int m = sc.nextInt();
		
		boolean f = true;  
		//遍历数组
		for (int i = 0; i < arr.length; i++) {
			//判断是否相同
			if(arr[i] == m) {
				System.out.println("数组中值的下标是:"+i);
				f = false;
			}
		}
		if(f = true) {
			System.out.println("数组中没有与输入的值一样的值");
		}
	}
}


方法二:
package com.DaYu;

import java.util.Scanner;

public class Demo05 {
	public static void main(String[] args) {
		//定义一个数组  
		int[] arr = {1,2,3,4,5,6,7,8,9};
		//键盘输入要查找的值
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入要查找的值");
		int m = sc.nextInt();
		//如果没有相同值则返回-1
		int index = -1;  
		//遍历数组
		for (int i = 0; i < arr.length; i++) {
			//判断是否相同
			if(arr[i] == m) {
				index = i;
			}
		}
		if(index == -1) {
			System.out.println("数组中没有与输入的值一样的值");
		}else {
			System.out.println("数组中值的下标是:"+index);
		}
	}
}
数组的扩容
package com.DaYu;

import java.util.Arrays;

public class Deno05 {
	public static void main(String[] args) {
		//定义一个容量为3的数组
		int[] arr = new int[3];
		//想在数组中存放第四个元素,则需要扩大其容量
		//使用方法Arrays.copyOf(),再将新数组的地址赋值给旧的变量
		arr = Arrays.copyOf(arr, 4);
		//遍历查看一下
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i]+" ");
		}
	}
}
数组的排序
package com.DaYu;

import java.util.Arrays;

public class Deno06 {
	public static void main(String[] args) {
		//定义一个容量为3的数组
		int[] arr = {3,5,1,78,23,0};
		//想在数组中存放第四个元素,则需要扩大其容量
		//使用方法Arrays.sort()
		Arrays.sort(arr);
		//遍历查看一下
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i]+" ");
		}
	}
}

猜你喜欢

转载自blog.csdn.net/qq_41401295/article/details/106303904