数组

1 篇文章 0 订阅

数组

数组中包含的变量必须是相同类型的

创建数组

静态初始化

数据类型[] 数组名 = {初始化数据};

例:int[] arr = {1,2,3};

动态初始化

数据类型[] 数组名 = new 数据类型{初始化数据};

例:int[] arr = new int{1,2,3};

给定数组长度但不初始化

数据类型[] 数组名 = new 数据类型[数组长度];

例:int[] arr = new int[10];//定义了一个长度为10的数组

数组的使用

获取数组长度

数组名.length;

下标越界(超出数组长度)

int[] arr = {1,2,3};
System.out.println(arr[5]);

//出现
java.lang.ArrayIndexOutOfBoundsException

遍历数组(将数组中的元素全部访问一遍)

for方法
    int[] arr = {1,2,3};
    for (int i = 0; i < arr.length; i++) {
        System.out.println(arr[i]);
    }
for-each方法
    int[] arr = {1,2,3};
    for (int a:arr) {
        System.out.println(a);
    }
使用工具类(将数组转为字符串输出)
法一
    int[] arr = {1,2,3};
    String str = Arrays.toString(arr);
    System.out.println(str);

法二
    int[] arr = {1,2,3};
    System.out.println(Arrays.toString(arr));

将无序数组变为有序的(升序)

public static void main(String[] args) {
    int[] arr = {5,8,6,7,3,2};
    Arrays.sort(arr);
    System.out.println(Arrays.toString(arr));
}

填充数组Arrays.fill()

Arrays.fill(array, fromIndex, toIndex, val);
array:要填充的数组名
fromIndex:从几号下标开始
toIndex:到几号下标结束
val ;要填充的值

    int[] a = new int[10];
    Arrays.fill(a,2,5,99);
    System.out.println(Arrays.toString(a));
    //结果为
    [0, 0, 99, 99, 99, 0, 0, 0, 0, 0]

引用数组的空引用

	int[] arr = null;//代表arr不指向任何对象
	System.out.println(arr[0]);//出现异常
	System.out.println(arr.length);//出现异常

	int[] arr1 = {};
	System.out.println(arr1[0]);//出现异常
	System.out.println(arr1.length);//结果为0
			
	int[] arr2 = new int[5];
	System.out.println(Arrays.toString(arr2));//结果为[0,0,0,0,0]
	System.out.println(arr2.length);//结果为5

数组转字符串

public static String myToString(int[] arr){
    if (arr == null){
        return "";
    }
    if (arr.length == 0){
        return "[]";
    }
    String ret = "[";
    for (int i = 0; i < arr.length; i++) {
        ret += arr[i];
        if( i != arr.length-1){
            ret += ", ";
        }
    }
    ret += "]";
    return ret;
}

数组的拷贝

for循环拷贝

public static int[] copy(int[] arr){
 	int[] copy_arr = new int[arr.length];
 	for (int i = 0; i < arr.length; i++) {
   	 	copy_arr[i] = arr [i];
	}
	return copy_arr;
}

使用Arrays.copyOf()方法

Arrays.copyOf ( int[] 要拷贝的数组,int 要拷贝的长度 );

public static int[] copy(int[] arr){
 	int[] copy_arr = Arrays.copyOf(arr,arr.length);
	return copy_arr;
}

使用Arrays.copyOfRange()方法

Arrays.copyOfRange( 要拷贝的数组 , 从几号下标开始拷贝 , 到几号下标结束);

public static int[] copy(int[] arr){
	int[] copy_arr = Arrays.copyOfRange(arr,1,5);
	return copy_arr;
}

使用clone()方法

public static int[] copy(int[] arr){
	int[] copy_arr = arr.clone();
	return copy_arr;
}

使用native方法

public static native void arraycopy(Object src,int srcPos,Object dest,int desPos,int length);
src:要拷贝的数组
srcPos:要拷贝的数组的位置
dest:目的地数组
desPos:目的地数组的位置
length:拷贝的长度

int[] arr = {1,2,3};
int[] copy = new int[arr.length];
System.arraycopy(arr,0,copy,0,arr.length);
System.out.println(Arrays.toString(copy));

数组的应用

找出数组的最大值

public static int maxArray(int[] arr){
	if(arr == null || arr.length == 0){
		return -1;
	}
	int max = arr[0];
	for(int i = 1; i <arr.length; i++){
		if(arr[i] > max){
			max = arr[i];
		}
	}
	return max;
}

求数组的平均值

public static int avgeArray(int[] arr){
	int sum= 0;
	for(int i = 0; i <arr.length; i++){
		sum+=arr[i];
	}
	double num = sum*1.0/arr.length;
	return num;
}

查找数组中的指定元素

顺序查找
piblic static int num(int[] arr,int key){
	for(int i = 0; i <arr.length; i++){
		if(arr[i] == key){
			return i;
		}
	}
	return -1;
}
二分查找
public static int binarySearch(int[] arr,int key){
	int left = 0;
	int right = arr.length-1;
	while(left<right){
		int mid = (left+right)/2;
		if(arr[mid] > key){
			right = mid -1;
		} else if(arr[mid] < key){
			left = mid +1;
		}else{
			return mid;
		}
	}
	return -1;
}

检查数组的有序性

public static boolean isSorted(int[] arr){
	for(int i =0 ; i < arr.length-1 ; i++){
		if(arr[i] > arr[i+1]){
			return false;}
		}
	}
	return true;
}

数组排序(冒泡排序)

public static void bubbleSort(int[] arr){
	boolean flg = false;//检查第i趟是否发生交换
	//i是趟数
	for(int i = 0; i < arr.length-1 ; i++){
		flg = false;//每一趟都有可能发生交换
		for(int j = 0; j < arr.length-1-i ; j++){
			if(arr[j] > arr[j+1]){
				int tmp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = tmp;
				flg = true;//发生交换
			}
		}
		if(flg == false){
			break;
		}
	}
}

数组逆序

public static void reverse(int[] arr){
	int left = 0;
	int right = arr.length-1;
	while(left < right){
		int tmp = arr[left];
		arr[left] = arr[right];
		arr[right] = tmp;
		left++;
		right--;
	}
}

数组元素所有偶数在奇数之前

public static void func(int[] arr){
    int left = 0;
    int right = arr.length-1;
    while(left < right){
        while( left < right && arr[left] % 2 ==0){
            left++;
        }
        while(right > left && arr[right] % 2 != 0){
            right--;
        }
        if(left <right){
            int tmp = arr[left];
            arr[left] = arr[right];
            arr[right] = tmp;
        }
    }
}

二维数组

创建二维数组

二维数组的定义
数据类型[][] 数组名称 = new 数据类型[行数][列数]{初始化数据};

int[][] array1 = {{1,2,3},{4,5,6}};
int[][] array2 = new int[][]{[1,2,3},{4,5,6}};
int[][] array3 = new int[3][];
int[][] array4 = new int[3][3];

float f[][] = new float[6][];
float []f[] = new float[6][];
float [][]f = new float[6][];

注意:定义二维数组时,行不能丢,列可以丢

int[][] array = new int[2][];
System.out.println(array[0]);//不指向任何引用,结果为null
array[0] = new int[3];//第0行有3列
array[1] = new int[4];//第1行有4列

二维数组的使用

获取数组的长度

二维数组的行数:array.length;
二维数组的列数:array[i].length;//i是指第几行

遍历二维数组

    int[][] array1 = {{1,2,3},{4,5,6}};
    for (int i = 0; i < array1.length; i++) {
        for (int j = 0; j < array1[i].length; j++) {
            System.out.print(array1[i][j] +" ");
        }
        System.out.println();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值