数组

数组

数组声明和创建

package com.cwk.array;

public class Demo01 {
    public static void main(String[] args) {
        //数组: 引用数据类型 开辟一组空间存放相同类型的数 int[]只能存int double[]存double,创建时长度要确定,不可更改,下标从零开始
        //声明数组(nums在栈中为变量名,存放这个引用在堆中的具体地址)   创建数组,确定长度,在堆创建了10个int类型的空间,全部默认为0
        int[] nums=new int[10];
        //对数组每个元素赋值
        for (int i = 0; i < nums.length; i++) {
            nums[i]=i;
        }
        //遍历数组
        for (int num : nums) {
            System.out.println(num);
        }


    }
}

内存分析

无标题

image-20210413113831526

package com.cwk.array;

public class Demo02 {
    public static void main(String[] args) {
        //数组内存分析和三种初始化
        //int[5] a;非法的  声明时没有实例化任何对象,实例化数组对象,jvm才会分配空间,才会有长度,因此,声明数组时不能指定其长度(数组中元素的个数)

        //声明一个数组
        int[] a=null;
        System.out.println(a);
        //创建数组 a指向这个数组在堆中首地址
        a=new int[5];
        System.out.println(a);


        //三种初始化
        //静态初始化 声明数组,创建数组,分配空间,赋值
        int[] nums={1,2,3};
        //动态初始化   声明数组,创建数组,为数组元素分配空间、赋值的操作、分开进行。
        int[] nums1=new int[2];
        nums1[0]=1;
        nums1[1]=2;

        //默认初始化 数组引用类型,元素相当于类的实例变量,数组对象被建立,实例变量也被默认初始化
        int[] num2=new int[2];
        for (int i : num2) {
            // 输出0 boolean[] 为false String[] 为null
            System.out.println(i);
        }


    }
}

一维数组注意点和总结

package com.cwk.array;

public class Demo03 {
    public static void main(String[] args) {
        //数组注意点与总结
        //数组下标[0-length-1]

//        数组是相同数据类型(数据类型可以为任意类型)的有序集合
//        数组也是对象。数组元素相当于对象的成员变量(详情请见内存图)
//        数组长度的确定的,不可变的。如果越界,则报:ArrayIndexOutofBounds
    }
}

数组的使用

package com.cwk.array;

public class Demo04 {
    public static void main(String[] args) {
        //数组的使用
        int[] arrays=new int[5];
        //普通for循环,可以修改数组元素的值
        for (int i = 0; i < arrays.length; i++) {
            arrays[i]=i;

        }
        //增强for循环
        for (int array : arrays) {
            System.out.println(array);
        }

        //数组作为参数
        printMax(arrays);

        //数组作为返回值
//        System.out.println("-------------");
//        int[] arrays2=reverse(arrays);
//        //原数组被反转
//        printArray(arrays2);
//        printArray(arrays);

        int[] array2=reverse2(arrays);
        //原数组不被反转
        printArray(array2);
        printArray(arrays);

    }

    private static int[] reverse2(int[] arrays) {
        //原数组不被反转,重新建立一个新数组,长度相同,不可以int[] result=arrays; result也指向了堆的那块数组空间
        int[] result=new int[arrays.length];
        for (int i = 0,j=result.length-1; i < result.length; i++,j--) {
            result[i]=arrays[j];
        }
        return result;
    }

    private static void printArray(int[] arrays2) {
        for (int i : arrays2) {
            System.out.print(i+" ");
        }
        System.out.println();
    }

    private static int[] reverse(int[] arrays) {
        //反转数组
        // 原数组的值会被修改
        for (int i = 0; i < arrays.length / 2; i++) {
            int t=arrays[arrays.length-i-1];
            arrays[arrays.length-i-1]=arrays[i];
            arrays[i]=t;
        }
        return arrays;
    }

    //打印数组最大值
    private static void printMax(int[] arrays) {
        int result=arrays[0];
        for (int array : arrays) {
            if(array>result) {
                result=array;
            }
        }
        System.out.println(result);
    }
}

二维数组

数组

package com.cwk.array;

public class Demo05 {
    public static void main(String[] args) {
        //二维数组,
        //创建两行三列的二维数组
        int[][] nums=new int[2][3];
        //第二种数组:一维数组的元素变成数组
        int[][] arrays={{1,2},{3,4},{5,6}};

        //遍历
        for (int i = 0; i < arrays.length; i++) {
            for (int j = 0; j < arrays[i].length; j++) {
                System.out.print(arrays[i][j]+" ");
            }
            System.out.println();
        }

    }
}

Arrays工具类

package com.cwk.array;

import java.util.Arrays;

public class Demo06 {
    public static void main(String[] args) {
        //Arrays类 工具类
        int[] arr = {1, 3, 2, 4, 35, 53, 13, 43};
        System.out.println(Arrays.toString(arr));
//        System.out.println(printArray(arr));
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));

        //数组复制
        int[] a={1,2,32,3,1,5};
        //原数组,起始索引,终止索引(左边右开),返回一个新数组
        int[] b = Arrays.copyOfRange(a, 0, a.length);
        System.out.println(Arrays.toString(b));
        // 数组复制方法二 要事先创立一个数组
        int[] c=new int[a.length];
        //原数组 源数组复制数据的起始位置 目标数组 复制到目标数组的启始位置 复制长度
        System.arraycopy(a,0,c,0,a.length);
        System.out.println(Arrays.toString(c));



    }

    //模拟toString,可以看源码
    private static String printArray(int[] arr) {
        if (null == arr) {
            return null;
        }
        int iMax = arr.length - 1;
        if (iMax == -1) {
            return "[]";
        }
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("[");
        for (int i = 0; ; i++) {
            stringBuilder.append(arr[i]);
            if (iMax == i) {
                return stringBuilder.append("]").toString();
            }
            stringBuilder.append(", ");
        }
    }
}

冒泡排序

package com.cwk.array;

import java.util.Arrays;

public class Demo07 {
    public static void main(String[] args) {
        int[] arr={1,3,2,35,3,2,5,7,4,90,50};
        int[] arr1=bubbleSort(arr);
        System.out.println(Arrays.toString(arr1));
    }

    private static int[] bubbleSort(int[] arr) {
        //冒泡排序
        //外部循环,决定走几趟,最复杂情况下arr.length-1次才可以排序后
        int temp=0;
        for (int i = 0; i < arr.length - 1; i++) {
            //加个标志位,如果排序已经完成(没有交换了)即可退出
            boolean flag=true;
            for (int j = 0; j < arr.length - i - 1; j++) {
                //把大的往后面移 从小到大排序
                if(arr[j+1]<arr[j]){
                    temp=arr[j+1];
                    arr[j+1]=arr[j];
                    arr[j]=temp;
                    flag=false;
                }
            }
            if(flag){
                break;
            }

        }
        return arr;
    }
}
posted @ 2021-04-14 08:44  cwenk  阅读(52)  评论(0)    收藏  举报