复习1:Arrays

Arrays

  • 数组是什么

  • 数组的特点

  • 数组的声明

  • 数组的长度

  • 元素的获取

  • 元素的打印

  • 数组的扩容

  • 数组的排序

  • 二维数组是什么

  • 二维数组的定义

  • 二维数组的内存图


数组是什么

数组是有序数据的集合,用于存放一组数据


数组的特点

  • 数组内元素的类型统一(与数组类型相同)
  • 数组内元素的排序是有序的(按赋值时的顺序排列)
  • 数组本身是不可变的,数组元素可变 (底层被final修饰)

数组的声明(以int类型为例)

声明方式 特点1 特点2
int[] array = {1,2,3,4} 声明与初始化同时进行,不可二次赋值
int[] array = new int[]{1,2,3,4} 声明与初始化同时进行,可以多次赋值
int[] array = new int[int n] 声明与初始化完全分离,可以多次赋值 数组内有默认元素,元素值视数据类型而定

注意:无论何种方式,数组的长度在被定义之时就已经确定下来了,且无法改变


数组的长度

数组的长度指的就是数组内元素的个数,数组本身没有长度

  • 获取数组长度:array.length

元素的获取

数组元素都有属于自己的索引,从0开始,到**(array.length-1)**结束

  • 示例:array [0],array [1],array [2],…,array [array .length-1]

注意:不能获取超出长度的元素,否则将抛出数组下标越界异常


元素的打印

  • 方式一:遍历/迭代—>输出
  • 方式二:Arrays.toString(Array)

注意:直接打印数组得到的是数组地址


数组的扩容

数组本身长度是不可变的,无法在原来的数组上新增

扩容方法特点 特点
创建一个新的数组,遍历源数组元素赋值给新数组,再将新数组赋值给源数组 基础、繁琐
System.arraycopy(源数组,源数组传递元素的开始位置,新数组,新数组接收元素的开始位置,从源数组复制到新数组的元素长度) 只实现了数组的复制,没有对源数组进行扩容
Arrays.copyof(源数组,长度) 自我复制实现对源数组的扩容

注意:

  • System.arraycopy:
    • 源数组传递元素时要注意越界问题(传递元素的开始位置+传递元素的长度<=源数组长度)
    • 新数组要留有足够的长度接收传递过来的元素(新数组长度-接收元素的开始位置>=传递元素的长度)
  • Arrays.copyof:
    • 返回一个数组,数组类型与源数组相同
    • 复制时,传递元素与接收元素都默认从第一个位置开始
    • 除了扩容,还可以实现数组长度的缩减

数组的排序

package myTest;

import java.util.Arrays;

public class Sort {
	public static void main(String[] args) {
	
		//JDK自带排序方法,默认从小到大
		int[] arr = new int[] {6,4,1,3,77,11,34};
		Arrays.sort(arr);
		System.out.println(Arrays.toString(arr));
		
		//选择排序,从小到大
		int[] brr = new int[] {6,4,1,3,77,11,34};
		for(int i=0;i<brr.length-1;i++) {
			for(int j=i+1;j<brr.length;j++) {
				if(brr[i]>brr[j]) {
					int temp = brr[j];
					brr[j] = brr[i];
					brr[i] = temp;
				}
			}
		}
		System.out.println(Arrays.toString(brr));
		
		//冒泡排序,从小到大
		int[] crr = new int[] {6,4,1,3,77,11,34};
		for(int i=0;i<crr.length-1;i++) {
			for(int j=0;j<crr.length-1;j++) {
				if(crr[j]>crr[j+1]) {
					int temp = crr[j+1];
					crr[j+1] = crr[j];
					crr[j] 	 = temp;
				}
			}
		}
		System.out.println(Arrays.toString(crr));
		
		//插入排序,从小到大
		int[] drr = new int[] {6,4,1,3,77,11,34};
		for(int i=1;i<drr.length;i++) {
			for(int j=i;j>0;j--) {
				if(drr[j-1]>drr[j]) {
					int temp = drr[j];
					drr[j] = drr[j-1];
					drr[j-1] = temp;
				}else {
					break;
				}
			}
		}
		System.out.println(Arrays.toString(drr));
	}
}


二维数组是什么

数组的数组,将一个数组看做是一种数据类型,创建该数据类型的数组

  • 示例:int[ ] [ ],其中int[ ]可以看做是一个数据类型,int[ ] [ ]就是这个类型的一个数组

注意:Java中没有二维数组的概念,正确的叫法是数组类型的数组


二维数组的定义

package day20191026;

public class Demo02 {
	public static void main(String[] args) {
		
		//创建了一个整形数组类型的数组,其中的元素都是默认值
		int[][] a = new int[3][];
		
		//二维数组的每一个元素都是数组,使用前需要先声明数组
        
        //当二维数组中的元素长度不同时
		a[0] = new int[4];
		a[1] = new int[5];
		a[2] = new int[6];
        
        //当二维数组中的元素长度相同时
        int[][] a = new int[3][4];
		
	}
}

注意:声名二维数组时,需要将二维数组的长度填在 “new int[ ] [ ]” 中的前一个 “[ ]” 中,将元素的长度填在后一个 “[ ]” 中


二维数组的内存图

以new int[3] [4]为例
二维数组内存图


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章