Java--数组

目录

基础

一、创建与使用

二、数组长度

三、访问数组中的元素

四、数组越界异常

1、负数下标

2、数组下标超过数组长度

五、空指针异常

六、遍历数组

1、for循环

2、for each:增强for循环

3、借助Java中操作数组的工具类 Arrays

JVM(Java虚拟机)

 实例

一、数组作为方法及返回值

1、修改数组某一元素

2、使数组每个元素*2

二、fill(填充)用法

三、数组交换

四、数组拷贝--拷贝会产生新的对象

1、for循环遍历

2、Arrays.copyof 以及 Arrays.copyOfRange

3、clone--产生一个副本

4、深拷贝 & 浅拷贝

五、数组查找

1、顺序查找

2、二分查找

六、数组排序

1、冒泡排序

二维数组

 一、二维数组的打印

1、循环嵌套

2、foreach:先用int[]循环数组,再用int循环每个数组中的内容

3、Arrays.deepToString(array)

二、二维数组的特殊形式

 1、Java中二维数组的定义可以省略列,不能省略行

2、不规则的二维数组

思维导图


基础

一、创建与使用

//定义数组时,不能写具体的数字 int[10] arr={}; 是错的
int[] array2=new int[3];
//new是Java的一个关键字,用来实例化一个对象,意味着Java中的一个数组也是一个对象
//大小为3,里面的每个元素为0
int[] array={1,2,3,4,5,6,7};//虽然没写new,实际上也是一个对象
int[] array3=new int[]{1,2,3,4,5};//new int[] 中括号里面不能写数字

二、数组长度

System.out.println(array.length);

三、访问数组中的元素

System.out.println(array[3]);

四、数组越界异常

1、负数下标

Java--数组_第1张图片

2、数组下标超过数组长度

Java--数组_第2张图片

五、空指针异常

int[] array2=null;
System.out.println(array2.length);
int[] array2=null;
System.out.println(array2[0]);

以上两段代码均为空指针异常

注意:在写数组函数时,要考虑 null 和 array.length==0 的情况

六、遍历数组

1、for循环

public static void main(String[] args) {
        int[] array={1,2,3,4,5,6,7,8,9,10};
        for(int i=0;i<10;i++){
            System.out.print(array[i]+" ");
        }
        System.out.println();
    }

2、for each:增强for循环

for (int x : array) {//for each,定义一个x接收元素
            System.out.print(x+" ");
        }
        System.out.println();

区别:for循环是可以拿到下标 的;for each是拿不到下标的,更多用于集合中

3、借助Java中操作数组的工具类 Arrays

Java--数组_第3张图片

JVM(Java虚拟机)

内存分为五个区

Java--数组_第4张图片Java--数组_第5张图片

注意:

1、对象在堆上,局部变量放在栈上;

2、引用不一定是在栈上,在不在栈上由变量性质决定——局部变量一定在栈上,实例成员变量不一定在栈上

3、一个引用可以理解成一个变量,存放地址;一个引用只能保存一个对象的地址

4、引用只能指向对象

 实例

一、数组作为方法及返回值

1、修改数组某一元素

数组传参时传的是地址,要分清改的是形参还是实参

Java--数组_第6张图片

2、使数组每个元素*2

public static int[] transform(int[] array){
        int[] ret=new int[array.length];
        for (int i = 0; i < array.length; i++) {
            ret[i]=2*array[i];
        }
        return ret;
    }
    public static void main(String[] args) {
        int[] array={1,2,3,4,5};
        int[] ret=transform(array);
        System.out.println(Arrays.toString(ret));
        System.out.println(Arrays.toString(array));
        System.out.println(Arrays.toString(transform(array)));
    }

Java--数组_第7张图片

二、fill(填充)用法

Java--数组_第8张图片

三、数组交换

public static void swap(int[] array){
        int tmp=array[0];
        array[0]=array[1];
        array[1]=tmp;
    }
    public static void main(String[] args) {
        int[] array={10,20};
        System.out.println("交换前:"+array[0]+" "+array[1]);
        swap(array);
        System.out.println("交换后:"+array[0]+" "+array[1]);
    }

四、数组拷贝--拷贝会产生新的对象

1、for循环遍历

public static int[] copyArray1(int[] array){
        int[] copy=new int[array.length];
        for(int i=0;i< array.length;i++){
            copy[i]=array[i];
        }
        return copy;
    }
    public static void main(String[] args) {
        int[] array={1,22,3,4,5,6,45};
        int[] ret=copyArray1(array);
        System.out.println(Arrays.toString(ret));
    }

2、Arrays.copyof 以及 Arrays.copyOfRange

Arrays.copyof可以拓展数组长度

Arrays.copyOfRange可以拷贝具体范围内的数组,Java中一般左闭右开

public static void main(String[] args) {
        int[] array={1,2,3,4,5,6,7};
        int[] ret=Arrays.copyOf(array,array.length*2);
        System.out.println(Arrays.toString(ret));
        int[] ret2=Arrays.copyOfRange(array,1,3);
        //Java中看见from和to依旧是左闭右开
        System.out.println(Arrays.toString(ret2));
    }

Java--数组_第9张图片

Java--数组_第10张图片

Java--数组_第11张图片

Java--数组_第12张图片

3、clone--产生一个副本

int[] copy=array.clone();
System.out.println(Arrays.toString(copy));

4、深拷贝 & 浅拷贝

深拷贝:拷贝完成之后,通过一个引用去访问和修改时,不会影响原来的内容

浅拷贝:拷贝完成之后,通过一个引用去访问和修改时,会影响原来的内容

五、数组查找

1、顺序查找

for循环,缺点:当数组中数据很多且查找最后一个数字时,循环次数太多

2、二分查找

前提,数组一定要是从大到小或者从小到大的有序数组

六、数组排序

1、冒泡排序

public static void bubbleSort(int[] array){
        for (int i = 0; i < array.length-1; i++) {//第i次交换
            boolean flg=false;
            for (int j = 0; j < array.length-1-i; j++) {//交换次数
                if(array[j]>array[j+1]){
                    int tmp=array[j];
                    array[j]=array[j+1];
                    array[j+1]=tmp;
                    flg=true;
                }    
            }
            if(flg==false)return;
        }
    }
    public static void main(String[] args) {
        int[] array={5,10,6,3,9};
        bubbleSort(array);
        System.out.println(Arrays.toString(array));
    }

二维数组

Java中的二维数组是特殊的一维数组

Java--数组_第13张图片

 一、二维数组的打印

1、循环嵌套

        int[][] array={{1,2,3},{4,5,6}};
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j]+" ");
            }
            System.out.println();
        }

2、foreach:先用int[]循环数组,再用int循环每个数组中的内容

        for (int[] ret:array) {
            for (int x:ret) {
                System.out.print(x+" ");
            }
            System.out.println();
        }

 

3、Arrays.deepToString(array)

        System.out.println(Arrays.deepToString(array));

二、二维数组的特殊形式

        int[][] array1={{1,2},{3,4,5}};
        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();
        }

 1、Java中二维数组的定义可以省略列,不能省略行

        int[][] array2=new int[2][];
        for (int i = 0; i < array2.length; i++) {
            for (int j = 0; j < array2[i].length; j++) {
                System.out.print(array2[i][j]+" ");
            }
            System.out.println();
        }

 Java--数组_第14张图片

 在打印的时候 array2[i].length 实际上是在使用 null.length,出现异常

改成下面这种形式可以避免报错

2、不规则的二维数组

        int[][] array3=new int[2][];
        array3[0]=new int[2];
        array3[1]=new int[3];
        for (int i = 0; i < array3.length; i++) {
            for (int j = 0; j < array3[i].length; j++) {
                System.out.print(array3[i][j]+" ");
            }
            System.out.println();
        }

思维导图

 如有错误 请多指教!

你可能感兴趣的:(java)