2.数组

1.数组的定义

(1)一维数组

String[] age = new String[3]; //推荐使用这中
String[] name = {"xiaojng","laowang"};   
String[] lan = new String[]{"C","Java"}; 

​ 数组属于引用类型,数组型数据是对象,存放在堆中,存放在堆中的数据默认是有初始化的:

  • int[]默认初始化为0
  • float[]和double[]---->0.0
  • char[]---->"\u0000"或0
  • boolean[]----->false
  • 引用数据类型(string、对象、接口)—>null

内存地址分配:

在这里插入图片描述
在这里插入图片描述

(2)二维数组

int[][] arr = new int[3][2];//3行2列

int[][] arr = new int[3][];//二维数组中有3个一数组 
    arr[0] = new int[3];    
    arr[1] = new int[1];   
    arr[2] = new int[2];
    
int[][] arr = new int[][]{
    
    {
    
    3,8,2},{
    
    2,7},{
    
    9,0,1,6}};int[][] arr = {
    
    {
    
    3,8,2},{
    
    2,7},{
    
    9,0,1,6}};

内存地址分配:

在这里插入图片描述
在这里插入图片描述

2.Arrays工具类的使用

java.util.Arrays类包含了用来操作数组的各种方法:
Arrays工具类的方法
注意:
sort()方法的实现是快速排序。
binarySearch()二分法查找,数组必须是有序的。
System.arraycopy():array的复制。

3.数组使用中的常见异常

在这里插入图片描述

4.数组中涉及到的常见的算法

(1)二分法查找(有序数组)

二分查找

(2)数组元素的排序

排序选择:

排序选择

常用排序:

冒泡排序:
	public static void bubbleSort(int[] data) {
    
    
		int arrayLength = data.length;
		for (int i = 0; i < arrayLength - 1; i++) {
    
    
			for (int j = 0; j < arrayLength - 1 - i; j++) {
    
    
				if(data[j] > data[j + 1]){
    
    
					int temp = data[j + 1];
					data[j + 1] = data[j];
					data[j] = temp;
					flag = true;
				}
			}
		}
	}
选择排序:
	public static void selectSort(int[] data) {
    
    
		int arrayLength = data.length;
		for (int i = 0; i < arrayLength - 1; i++) {
    
    
			int minIndex = i;
			for (int j = i + 1; j < arrayLength; j++) {
    
    
				if (data[minIndex] - data[j] > 0) {
    
    
					minIndex = j;
				}
			}
			if(minIndex != i){
    
    
				int temp = data[i];
				data[i] = data[minIndex];
				data[minIndex] = temp;
			}
		}
	}
快速排序:
	private static void swap(int[] data, int i, int j) {
    
    
		int temp = data[i];
		data[i] = data[j];
		data[j] = temp;
	}

	private static void subSort(int[] data, int start, int end) {
    
    
		if (start < end) {
    
    
			int base = data[start];
			int i = start;
			int j = end + 1;
			while (true) {
    
    
				while (i < end && data[++i] - base <= 0)
					;
				while (j > start && data[--j] - base >= 0)
					;
				if (i < j) {
    
    
					swap(data, i, j);
				} else {
    
    
					break;
				}
			}
			swap(data, start, j);
			subSort(data, start, j - 1);//递归调用
			subSort(data, j + 1, end);
		}
	}
	public static void quickSort(int[] data){
    
    
		subSort(data,0,data.length-1);
	}

猜你喜欢

转载自blog.csdn.net/xiaojingfirst/article/details/90249624
今日推荐