数组

1.数组的概念

在内存中一块连续的空间,存储数据类型相同的内容,长度是固定的。

2.数组的定义

1.先声明、再分配空间:
数据类型[] 数组名;
数组名 = new 数据类型[长度]
2.声明并分配空间:
数据类型[] 数组名 = new 数据类型[长度];
3.声明并赋值(繁):
数据类型[] 数组名 = new 数据类型[]{value1,value2,value3,....};
4.声明并赋值(简):
数据类型[] 数组名 = {value1,value2,value3,....}; //显示初始化,注意:不可换行

/**
 * 	数组定义的方式
 * 	数组的特点:
 * 	在内存中一块  连续  的空间,存储数据类型   相同   的内容,长度是  固定  的。
 * @author WHD
 *
 */
public class Test1 {
	public static void main(String[] args) {
		// 方式1 先声明 再分配空间
		int a;
		a = 10;
		
		int [] arr1;
		arr1 = new int[5];
		// 方式2 连声明 带 分配空间
		int [] arr2 = new int[3];
		
		// 方式3 声明并且赋值 繁琐
		int [] arr3 = new int[] {1,3,5,7,9};
		
		// 方式4 声明并且赋值 简单
		int [] arr4 = {2,4,6,8,10};		
	}
}
/**	
 * 	各种类型数组
 * @author WHD
 *
 */
public class Test1 {
	public static void main(String[] args) {
		byte [] arr1 = new byte[10];
		
		short [] arr2 = {1,2,3,4,5};
		
		int [] arr3 = new int[] {1,2,3,4,5};
		
		long [] arr4 = new long[10];
		
		
		float [] arr5 =  {1,2,3,4,5};
		
		double [] arr6 = new double[10];
		
		boolean [] arr7 = new boolean[3];
		
		char [] arr8 = new char[] {'a','b','c'};
		
		String [] arr9 = {"a","b","c"};
		
	}
}

3.数组的访问

数组的访问:赋值和取值
通过下标访问数组的元素,下标从0开始,依次加1

/**
 * 	数组的访问:赋值和取值
 * 	通过下标访问数组的元素 下标从0开始 依次加1
 * @author WHD
 *
 */
public class Test2 {
	public static void main(String[] args) {
		int [] arr1 = new int[5];
		arr1[0] = 10;
		arr1[1] = 12;
		arr1[2] = 15;
		arr1[3] = 22;
		arr1[4] = 35;
		
//		arr1[5] = 66; 数组下标越界异常ArrayIndexOutOfBoundsException 不能访问超过数组下标的范围
		
		System.out.println(arr1[0]);
		System.out.println(arr1[1]);
		System.out.println(arr1[2]);
		System.out.println(arr1[3]);
		System.out.println(arr1[4]);
//		System.out.println(arr1[21]);数组下标越界异常ArrayIndexOutOfBoundsException 	
	}
}

4.数组的遍历

数组的遍历:逐一将数组中的元素进行访问
数组的属性:length表示数组的长度,是一个int类型的数组
使用方式:数组名.length
在遍历数组的时候,推荐使用length作为判断条件,更准确,不会出错

public class Test1 {
	public static void main(String[] args) {
		int [] arr1 = {11,22,33,44,55,2,454,1,56,1,4,4,5,7,85,1,4,56,11,22,33,44,55,2,454,1,56,1,4,4,5,7,85,1,4,5611,22,33,44,55,2,454,1,56,1,4,4,5,7,85,1,4,5611,22,33,44,55,2,454,1,56,1,4,4,5,7,85,1,4,5611,22,33,44,55,2,454,1,56,1,4,4,5,7,85,1,4,56};
		System.out.println(arr1.length);
		for(int i = 0;i < arr1.length;i++) {
			System.out.println(arr1[i]);
		}
	}
}

5.数组的默认值

数组的默认值
整数:0
小数:0.0
字符:\u0000
布尔:false
其他:null

public class Test2 {
	public static void main(String[] args) {
		byte [] arr1 = new byte[3];
		for(int i = 0;i < arr1.length;i++) {
			System.out.print(arr1[i] + "\t");
		}
		System.out.println();
		
		short [] arr2 = new short[5];
		for (int i = 0; i < arr2.length; i++) {
			System.out.print(arr2[i] + "\t");
		}
		System.out.println();
		
		float [] arr3 = new float[6];
		for (int i = 0; i < arr3.length; i++) {
			System.out.print(arr3[i] + "\t");
		}
		System.out.println();
		char [] arr4 = new char[7];
		for (int i = 0; i < arr4.length; i++) {
			System.out.print(arr4[i] + "-");
		}
		System.out.println();
		
		boolean [] arr5 = new boolean[2];
		for (int i = 0; i < arr5.length; i++) {
			System.out.print(arr5[i] + "\t");
		}
		System.out.println();
		String [] arr6 = new String[5];
		for (int i = 0; i < arr6.length; i++) {
			System.out.print(arr6[i] + "\t");
		}
	}
}

6.数组的扩容

实现思路:
定义一个更长的数组,将原数组中的元素逐一复制到新的数组中

public class Test1 {
	public static void main(String[] args) {
		int [] arr1 = new int[5];
		arr1[0] = 11;
		arr1[1] = 22;
		arr1[2] = 33;
		arr1[3] = 44;
		arr1[4] = 55;
		
		int arr2[] = new int[arr1.length * 2];
		for(int i = 0;i < arr1.length;i++) {
			arr2[i] = arr1[i];
		}
		
		
		for(int i = 0;i < arr2.length;i++) {
			System.out.print(arr2[i] + "\t");
		}
	
	}
}

7.数组的复制

7.1循环实现

package com.qfedu.test5;
/**
 * 	复制数组
 * 	1. 使用循环复制
 * @author WHD
 *
 */
public class Test1 {
	public static void main(String[] args) {
		int [] arr1 = {11,22,33,44,55};
		int [] arr2 = new int[arr1.length * 2];
		for(int i =0;i < arr1.length;i++) {
			arr2[i] = arr1[i];
		}		
	}
}

7.2 System.arraycopy方法

package com.qfedu.test5;
/**
 * 	2. System.arraycopy(原数组,原数组起始,新数组,新数组起始,长度);
 * @author WHD
 *
 */
public class Test2 {
	public static void main(String[] args) {
		int [] arr1 = {11,22,33,44,55};
		int [] arr2 = new int[arr1.length * 2];
		
//		System.arraycopy(arr1, 0, arr2, 0, 5);
//		System.arraycopy(arr1, 1, arr2, 2, 3);
		System.arraycopy(arr1, 3, arr2, 5, 2);
		for (int i = 0; i < arr2.length; i++) {
			System.out.print(arr2[i] + "\t");
		}
		System.out.println();
		
	}
}

7.3 Arrays.copyOf方法

package com.qfedu.test5;

import java.util.Arrays;

/**
 * 	3. Arrays.copyOf(原数组,新长度)  
 * @author WHD
 *
 */
public class Test3 {
	public static void main(String[] args) {
		int [] ar1 = {11,22,33,44,55};
		int arr2[] = Arrays.copyOf(arr1, 10); // 长度超过原数组将以默认值填充 
		for (int i = 0; i < arr2.length; i++) {
			System.out.print(arr2[i] + "\t");
		}
		System.out.println();
	}
}

8.值传递和引用传递(面试题)

值传递和引用传递的区别?
基本数据类型参数传递,传递的是原来变量的副本,不会影响原来的变量
引用数据类型参数传递,传递的是地址的副本,会影响原来的变量
String类型属于特殊的引用数据类型,作为参数传递原来的不会改变

package com.qfedu.test7;
/**
 * 	值传递
 * 	基本数据类型参数传递 传递的都是值 不会影响原来的变量的值
 * @author WHD
 *
 */
public class Test1 {
	public static void main(String[] args) {
		int a = 10;
		m1(a);
		System.out.println("实参变量a的取值为" + a);
	}
	
	public static void m1(int num) {
		num+=10;
		System.out.println("m1方法中num的取值为" + num);
	}
}

package com.qfedu.test7;
/**
 * 	引用传递
 * 	引用传递 引用数据类型传递  传递的是地址  所以会影响所有的变量
 * @author WHD
 *
 */
public class Test2 {
	public static void main(String[] args) {
		int [] a = {1,3,5,7,9};
		System.out.println(a);
		m1(a);
		for (int i = 0; i < a.length; i++) {
			System.out.print(a[i] + "\t");
		}
	}
	
	public static void m1(int [] nums) {
		System.out.println(nums);
		for (int i = 0; i < nums.length; i++) {
			nums[i] ++;
		}
	}

}
package com.qfedu.test7;
/**
 * 	String类型是特殊的引用数据类型 所以作为参数传递 不会改变原来的变量
 * @author WHD
 *
 */
public class Test3 {
	public static void main(String[] args) {
		String a = "hello";
		m1(a);
		System.out.println(a);
	}
	public static void m1(String str) {
		str += "abc";
	}
}

9.数组参数和数组返回值

数组类型的参数,使用方式与之前用法一样

package com.qfedu.test6;
/**
 * 	数组类型的参数 使用方式与之前用法一样
 * @author WHD
 *
 */
public class Test3 {
	public static void main(String[] args) {
		String [] strs = {"a","b","c"};
		m1(strs);
	}
	
	public static void m1(String [] strs) {
		for (int i = 0; i < strs.length; i++) {
			System.out.println(strs[i]);
		}
	}
}
package com.qfedu.test6;

import java.util.Scanner;

/**
 * 	数组类型的返回值
 * 	编写一个方法让用户输入个人的 三门成绩  并且保存到数组中返回
 * @author WHD
 *
 */
public class Test4 {
	public static void main(String[] args) {
		double [] scores = getScore();
		for (int i = 0; i < scores.length; i++) {
			System.out.print(scores[i] + "\t");
		}
	}
	
	public static double[] getScore() {
		Scanner input = new Scanner(System.in);
		double [] scores = new double[3];
		for(int i = 0;i < scores.length;i++) {
			System.out.println("请输入第"+(i + 1)+"门成绩");
			scores[i] = input.nextDouble();
		}
		return scores;
	}
}

10.二维数组

二维数组,数组中的元素还是数组,创建二维数组的方式还跟之前一样,有四种

public class Test1 {
	public static void main(String[] args) {
		int [] nums1 = {1,2,3,4,5};
		// 声明带赋值 简单
		int [][] nums2 = {{1,2,3}, {4,5,6,7,8,9,5,6,8,6,5,20}, {11,22,33,445} , {89,78,45}};
		System.out.println(nums2[0][0]);
		System.out.println(nums2[0][1]);
		System.out.println(nums2[0][2]);
		
		System.out.println(nums2[1][0]);
		System.out.println(nums2[1][1]);
		System.out.println(nums2[1][2]);
		
		// 声明带赋值 繁琐
		int [][] nums3 = new int[][] {{1},{2},{3}};
		
		// 先声明 再开辟空间
		int [][] nums4;
		nums4 = new int[4][];
		
		nums4[0] = new int[3];
		nums4[0][0] = 20;
		nums4[0][1] = 21;
		nums4[0][2] = 22;
		
		nums4[1] = new int[4];
		nums4[1][0] = 11;
		nums4[1][1] = 12;
		nums4[1][2] = 13;
		nums4[1][3] = 14;
		
		nums4[2] = new int[5];
		nums4[2][0] = 1;
		nums4[2][1] = 1;
		nums4[2][2] = 1;
		nums4[2][3] = 1;
		nums4[2][4] = 1;
		
		
		nums4[3] = new int[6];
		nums4[3][0] = 2;
		nums4[3][1] = 2;
		nums4[3][2] = 2;
		nums4[3][3] = 2;
		nums4[3][4] = 2;
		nums4[3][5] = 2;
		
		
		for(int i = 0;i < nums4.length;i++) {
			// System.out.println(nums4[i]);
			for(int j = 0;j <nums4[i].length;j++) {
				System.out.print(nums4[i][j] + "\t");
			}
			System.out.println();
		}
		
		
		// 连声明带开辟空间
		int [][]nums5 = new int[2][3];
		for(int i = 0;i <nums5.length;i++) {
			for (int j = 0; j < nums5[i].length; j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
}
posted @ 2021-07-24 14:07  码丁XIA  阅读(34)  评论(0)    收藏  举报