Java-6 数组

1.数组

  • 用来存储一组相同数据类型的集合(容器)。

  • 特点

    1.数组中元素类型必须一致。
    2.数组本身是引用数据类型,但是里面元素就可以是基本数据类型,也可以是引用数据类型。
    3.数组的长度都一旦给定无法改变。
    
  • 声明数组格式

    数据类型[] 数组名
    
    数据类型 数组名[]
    
  • 数组声明

    int[] arr
    

1.1动态数组初始化

  • 动态初始化
// 数据类型[] 数组名 new 数据类型[长度]
int[] arr=new int[4];
  • 数组的索引:从0开始,最大值就是数组长度减1.

  • 给数组中元素赋值:

    数组名[索引值]= 要赋的值;
    
  • demo

    package Array;
    
    public class ArrayDemo1 {
    	public static void main(String[] args) {
    		int [] arr;
    		arr = new int[4];
    		arr[2] = 4;
    		arr[3] = 66;
    		System.out.println(arr[0]);// 0
    		System.out.println(arr[2]);// 4
    	}
    }
    
  • 创建一个String类型4个长度数组,把四个季节存储到该数组中

    package Array;
    
    public class ArrayDemo2 {
    	public static void main(String[] args) {
    		String[] arr;
    		arr = new String[4];
    		arr[0] = "春天";
    		arr[1] = "夏天";
    		arr[2] = "秋天";
    		arr[3] = "冬天";
    		System.out.println(arr.length);
    		for(int i=0;i<arr.length;i++) {
    			System.out.println(arr[i]);
    		}
    	}
    }
    
    
  • 创建一个char类型的数组,把"你","好"分别存进去

    package Array;
    
    public class ArrayDemo2 {
    	public static void main(String[] args) {
    		char[] arr = new char[2]
    		arr[0] = '你';
    		arr[1] = '好';
    	}
    }
    
  • 创建一个长度10的int数组,把1-10存储进去

    package Array;
    
    public class ArrayDemo2 {
    	public static void main(String[] args) {
    		int[] arr = new int[10];
    		for (int i=0; i<10; i++) {
    			arr[i] = i+1;
    		}
    	}
    }
    

1.2.静态初始化

  • 给定数组中元素,由系统根据元素个数开辟空键并赋值。

  • 格式

    数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素2......}
    
    简写: 只有第一个初始化时候才可以这么书写,重新赋值不能这么写
    数据类型[] 数组名 = {元素1,元素2,元素2......}
    
  • demo

    int[] arr2 = new int[] {1,3,4,5,2,2,55,3};
    arr2 = new int[] {3,4,6};
    
  • 创建int数组,存入5个元素,求该数组元素之和,平均值

    package Array;
    
    public class ArrayDemo3 {
    	public static void main(String[] args) {
    		int sum = 0;
    		int[] arr = new int[] {1,6,23,5,9};
    		for (int i=0;i<arr.length;i++) {
    			sum += arr[i];
    		}
    		System.out.println("求和:"+ sum);// 44
    		System.out.println("平均值:" + (double)sum/arr.length);// 8.8
    	}
    }
    

1.3数组内存分析

  • 在java中内存分配:栈和堆,栈中存储局部变量,方法的执行。堆可以简单理解new出来的东西。
  • 存储在堆内粗中数据类型是有默认值的,如果是引用类型为null。

// 解析:
	在我们通过new int[5] 时候会在堆开辟一个5个长度数组空间,并形成一个地址,通过在main种,int arr 指向该数组内存地址,当我们给数组内元素赋值,首先根据内存地址找到该数组堆空间位置,并修改相应的值。

1.4 数组中常见2种异常

  • 空指针异常
package Array;

public class ArrayDemo4 {
	public static void main(String[] args) {
		int[] arr = null;
		System.out.println(arr);
		// 当用null调用里面数据和方法,会出现空指针异常
		System.out.println(arr[0]);
	}
}

  • 数组角标越界异常
arr = new int[3];
System.out.println(arr[3]);

1.5数组练习案例

  • 点名系统,从班级所有人姓名种随机抽选一个人:
package Array;

import java.util.Random;

public class ArrayDemo5 {
	public static void main(String[] args) {
		String[] names = new String[]{"小明","小刘","小刚","小邱","小赵"};
		// 创建Random对象
		Random r = new Random();
		// 生成随机数 下面生成数0<=num<10
		int num = r.nextInt(names.length);
		System.out.println(names[num]);
	}
}

1.6数组的打印及工具类

  • Array.ArrayDemo
package Array;

import util.ArrayUtil;

public class ArrayDemo6 {
	public static void main(String[] args) {
		int[] arr = {13, 15, 16,40};
		String[] arr2 = {"小明", "小洪", "小刚"};
		ArrayUtil.printArr(arr);
		ArrayUtil.printArr(arr2);
	}
}

  • util.ArrayUtil
package util;

public class ArrayUtil {
    // 接收int类型
	public static void printArr(int[] arr) {
		for(int i=0;i<arr.length;i++) {
			if (arr.length == 1) {
				System.out.println("[" + arr[0] + "]");
			} else if (i == 0) {
				System.out.print("[" + arr[i] + ",");
			}else if (i == arr.length-1) {
				System.out.println(arr[i] + "]");
			}else {
				System.out.print(arr[i] + ",");
			}
		}
	}
	// 方法重载  接收string
	public static void printArr(String[] arr) {
		for(int i=0;i<arr.length;i++) {
			if (arr.length == 1) {
				System.out.println("[" + arr[0] + "]");
			} else if (i == 0) {
				System.out.print("[" + arr[i] + ",");
			}else if (i == arr.length-1) {
				System.out.println(arr[i] + "]");
			}else {
				System.out.print(arr[i] + ",");
			}
		}
	}
	
}

1.7数组中的最值

// 主函数
package Array;
import util.ArrayMaxMin;

public class ArrayDemo7 {
	public static void main(String[] args) {
		// 创建一个数组
		int[] arr = {23,555,32,13,1,55};
		ArrayMaxMin.arrMaxMin(arr);
	}
}



// 工具类
package util;
public class ArrayMaxMin {
	public static void arrMaxMin(int[] arr) {
		// 设置一个变量存储最大值
		int max = arr[0];
		int min = arr[0];
		// 遍历数组用max和数组中元素比较
		for(int i=0;i<arr.length;i++) {
			if (arr[i] > max) {
				max = arr[i];
			}
			if (arr[i]< min) {
				min = arr[i];
			}
		}
		System.out.println(max);// 555
		System.out.println(min);// 1
	}
}


1.8数组元素交换

package Array;

import util.ArrayUtil;
public class ArrayDemo8 {
	public static void main(String[] args) {
		int[] arr = new int[] {100,200};
		int tmp = arr[0];
		arr[0] = arr[1];
		arr[1] = tmp;
		ArrayUtil.printArr(arr);
	}
}

1.9数组的逆序

  • 方式1:
package Array;

import util.ArrayUtil;

public class ArrayDemo9 {
	public static void main(String[] args) {
		int[] arr = {1,2,3,4,5,6,7,8};
		int tmp;
		for (int i=0;i<arr.length/2;i++) {
			tmp = arr[i];
			arr[i] = arr[arr.length-i-1];
			arr[arr.length-i-1] = tmp;
		}
		ArrayUtil.printArr(arr);// [8,7,6,5,4,3,2,1]
	}
}
  • 方式2:
package Array;

import util.ArrayUtil;

public class ArrayDemo9 {
	public static void main(String[] args) {
		int[] arr = {1,2,3,4,5,6,7,8};
		for(int start=0,end=arr.length-1; start< end; start++,end--) {
			int tmp = arr[start];
			arr[start] = arr[end];
			arr[end] = tmp;
		}
		ArrayUtil.printArr(arr);
	}
}

1.10多维数组

  • n 维数组就是元素为n-1维数组的数目。
  • 二维数组格式:
1.数据类型[][] 数组名 = new 数据类型[m][n]
	m: 二维数组中一维数组的个数
	n: 一维数组中元素个数

2. 数据类型[][] 数组名 = new 数据类型[m][];
	m: 二维数组中一维数组的个数
3. 数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2...},{元素1,元素2...}}
  • 二维数组定义方式:
  • 方式1:
int[][] arr = new int[4][3];
System.out.println(arr);// [[I@7c75222b
System.out.println(arr[0]);// [I@4c203ea1
System.out.println(arr[0][0]);// 0

// 给第二个数组中的第二个元素赋值给100
arr[1][1] = 100;
// 打印最后一个数组中最后一个元素
System.out.println(arr[3][2]);

  • 方式2:
// 注意:给二维数组内一维数组赋值时候,不能简写
int[][] arr2 = new int[5][];
arr[0] = new int[] {1,2,3,4,5,6};
arr[1] = new int[] {1,2,3};
  • 方式3:
int[][] arr3 = new int[][] {{2,3,5,6},{4,5,3}};
System.out.println(arr3.length);// 2
System.out.println(arr3[0].length);// 4
System.out.println(arr3[0][3]);// 6
  • 二维数组中遍历:
for(int i=0;i<arr3.length;i++) {
	ArrayUtil.printArr(arr3[i]);
}
// [2,3,5,6]
// [4,5,3]

原文地址:https://www.cnblogs.com/xujunkai/p/13702266.html