java数组的学习

数组

  • 数组是相同类型数据的有序集合
  • 数组描述的是相同类型的若干个数据,按照一定的先后顺序排列组合而成
  • 里面的每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问他们
public class ArrayDemo01 {
    public static void main(String[] args) {
        // 变量的类型    变量的名字    =  变量的值
        int[] nums;   // 声明了一个int类型的数组

        nums = new int[10]; // 创建了一个数组
       
        for (int i = 0; i < nums.length; i++) {
            nums[i] = i+1;
            System.out.print(nums[i]+"\t");
        }

    }
}

输出结果:

1	2	3	4	5	6	7	8	9	10	

数组特点:

  • 长度是确定的,大小不可以改变
  • 元素必须是相同类型
  • 元素可以是任何数据类型,包括基本类型和引用类型
  • 数组变量属于引用类型,数组本身就是对象,Java中对象是在堆中的,所以数组对象本身实在堆中的

数组长度是array.length,所以下标最大为array.length-1,如果超出,会报错:.ArrayIndexOutOfBoundsException:数组下标越界异常

数组使用

demo04

  • 普通的for循环
  • for-each循环
  • 数组作方法入参
  • 数组作为返回值
public class ArrayDemo04 {
    public static void main(String[] args) {
        // 声明一个数组
        int[] arrays = {1, 3, 4, 5, 6,};

        // jdk1.5    没有下标
        // for-each 循环
        for (int array : arrays) {
            System.out.println(array);
        }

        // 方法的使用
        printArray(arrays);

        int[] reverse = reverseArray(arrays);
        printArray(reverse);

    }


    // 数组作方法入参
    public static void printArray(int[] arrays) {
        for (int i = 0; i < arrays.length; i++) {
            System.out.println(arrays[i]);

        }
    }
    // 数组作为返回值
    public static int[] reverseArray(int[] arrays) {
        int[] result = new int[arrays.length];
        // 反转操作
        for (int i = 0, j = result.length - 1; i < arrays.length; i++, j--) {
            result[j] = arrays[i];
        }


        return result;
    }

}

输出结果:

1	3	4	5	6	
===============================
1	3	4	5	6	
===============================
6	5	4	3	1	

多维数组

public class ArrayDemo05 {
    public static void main(String[] args) {

        int[][] arrays = {{1}, {3,2,3,5}, {4, 5, 6}};

        for (int[] array : arrays) {
            for (int i : array) {
                System.out.print(i + " ");

            }

        }
    }

}

冒泡排序

冒泡排序是最出名的排序算法之一,总共有八大排序。

public class ArrayDemo07 {
    public static void main(String[] args) {

       // 冒泡排序:比较数组中两个相邻的元素,如果第一个数比第二个数大,就交换位置。
        // 每次比较都会产生出一个最大或者最小的数。
        // 下一轮可以少一次排序!!
        // 一次循环,直到结束!!
        int[]  a = {6,3,6776,434,221,2,3,};
        int[] b = sort(a);
        System.out.println(Arrays.toString(b));

    }
    
    public static int[] sort(int[] array){
        int temp;
        // 外层循环,判断要走多少次
        for (int i = 0; i < array.length-1; i++) {
            // 优化
            boolean flag = false;

            // 判断大小
            for (int j = 0; j < array.length-1-i; j++) {
                /*
                如果判断条件为:array[j]>array[j+1],则会依次将较大的值移到后面
                如果判断条件为:array[j+1]>array[j],则会依次将较小的值移到后面
                 */
                if(array[j]>array[j+1]){
                    temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                    flag = true;
                }

                }
            if(!flag){
                break;
            }
            
        }
        
        return array;
        
    }

}

输出结果:

[2, 3, 3, 6, 221, 434, 6776]

稀疏数组

  • 当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组
  • 稀疏数组的处理方式是:
    • 记录数组一共有几行几列,有多少个不同值
    • 把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
public class ArrayDemo08 {
    public static void main(String[] args) {

        // 创建一个二维数组  11*11   0:没有棋子   1:黑棋    2:白棋
        int[][] array1 = new int[11][11];
        array1[1][2] = 1;
        array1[2][3] = 2;
        System.out.println("打印数组");
        for (int[] ints : array1) {
            for (int anInt : ints) {
                System.out.print(anInt + "\t");

            }
            System.out.println();

        }

        System.out.println("=========================================");
        System.out.println("创建稀疏数组");
        // 判断有多少个不为0的数
        int sum = 0;
        for (int i = 0; i < array1.length; i++) {
            for (int j = 0; j < array1[i].length; j++) {
                if (array1[i][j] != 0) {
                    sum++;
                }

            }


        }
        System.out.println("sum:" + sum);
        // 创建稀疏数组
        int[][] array2 = new int[sum + 1][3];
        array2[0][0] = 11;  // 原数组的行数
        array2[0][1] = 11;  // 原数组的列数
        array2[0][2] = sum;
        int count = 0;
        for (int i = 0; i < array1.length; i++) {
            for (int j = 0; j < array1[i].length; j++) {
                if (array1[i][j] != 0) {
                    count++;
                    array2[count][0] = i;
                    array2[count][1] = j;
                    array2[count][2] = array1[i][j];

                }

            }


        }
        System.out.println("打印稀疏数组");
        for (int i = 0; i < array2.length; i++) {
            System.out.println(array2[i][0] + "\t" + array2[i][1]+"\t" + array2[i][2]);

        }
        System.out.println("================================");
        System.out.println("通过稀疏数组还原数组");
        int[][] array3 = new int[array2[0][0]][array2[0][1]];
        for (int i = 1; i <array2.length ; i++) {
            array3[array2[i][0]][array2[i][1]] = array2[i][2];

        }
        // 打印还原数组
        for (int i = 0; i < array3.length; i++) {
            for (int j = 0; j < array3[i].length; j++) {
                System.out.print(array3[i][j] + "\t");

            }
            System.out.println();

        }

    }
}

打印数组
0	0	0	0	0	0	0	0	0	0	0	
0	0	1	0	0	0	0	0	0	0	0	
0	0	0	2	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
=========================================
创建稀疏数组
sum:2
打印稀疏数组
11	11	2
1	2	1
2	3	2
================================
通过稀疏数组还原数组
0	0	0	0	0	0	0	0	0	0	0	
0	0	1	0	0	0	0	0	0	0	0	
0	0	0	2	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
posted @ 2025-11-19 21:17  冰封少年  阅读(0)  评论(0)    收藏  举报