分享

数组

 印度阿三17 2021-02-13

第五天

数组

  1. 数组是相同类型数据的有序集合。
  2. 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访向它i们
package com.array;

public class Demo01 {
    //变量的类型 变量的名字 = 变量的值
    //数组的类型

    public static void main(String[] args) {
        int[] nums; //申明数组,没分配空间
        int nums01[]; //定义

        nums = new int[10];//创建数组,可以存放十个类型的数字

        int[] nums02 = new int[25];

        //给数组赋值
        nums[0] = 1;
        nums[1] = 2;
        nums[2] = 3;
        nums[3] = 4;
        nums[4] = 5;
        nums[5] = 6;
        //没赋值就是默认值

        System.out.println(nums[0]);

        //计算所有元素的和
        int sum = 0;
        //获取数组长度: arrays.length
        for (int i = 0; i < nums.length; i  ) {
            sum = sum   nums[i];
            System.out.println(sum);


        }
    }
}

其长度是确定的。数组一旦被創建,它的大小就是不可以改变的
其元素必须是相同类型,不允许出现混合类型

  1. 数组中的元素可以是任何数据类型,包括基本类型和引用类型
  2. 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量
  3. 数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。

内存分析

image-20210212120106117

初始化

package com.array;

public class Demo {
    public static void main(String[] args) {
        //静态初始化 创建并赋值
        int[] a = {3,4,5,6,7,5,1,23,5};

        //动态初始化 包含默认初始化
        int[] b = new int[10];
        b [0]=10;

    }


}

下标的合法区向[o, length-1,如果越界就会报错;
Arraylndexoutofboundsexception:数组下标越界异常!
小结
◆数组是相同数据类型(数据类型可以为任意类型)的有序集合
◆数组也是对象。数组元素相当于对象的成员变量
◆数组长度的确定的,不可变的。如果越界,则报Arrayindexoutofbounds


数组的使用

package com.array;

public class Demo02 {
    public static void main(String[] args) {
        int []  array= {0,123,456,654,789,158,321,456,258 }  ;
        
        //打印全部元素
        for (int i = 0; i < array.length; i  ) {
            System.out.println(array[i]);

        }

        //查找最大的元素

        int max = array[0];
        for (int i = 0; i < array.length; i  ) {
            if (array[i]>max){
                max = array[i];
            }
        }
        System.out.println(max);



    }
}

package com.array;

public class Demo03 {
    public static void main(String[] args) {
        int [] array = {0,1,2,3,4,5};

        //没有下标,jdk1.5
        //快捷键 array.for
        //遍历数组中的元素
        for (int i : array) {
            System.out.println(i);

        }
    }
}

package com.array;

public class Demo03 {
    public static void main(String[] args) {
        int [] array = {0,1,2,3,4,5};

        //没有下标,jdk1.5
        for (int i : array) {
            System.out.println(i);

        }

        printArray(array);
        int[] reverse = reverse(array);
        printArray(reverse);
    }
    //打印数组
    public static void printArray(int[] array){
        for (int i = 0;i < array.length;i  ){
            System.out.println(array[i] "");
        }

    }
    //反转数组
    public static int [] reverse(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;
    }
}


Araays 类

  1. 打印数组元素:Araays.toString
  2. 排序算法: sort
  3. 数组赋值:fill
  4. 判断数组元素是否相等:equals
  5. 二分法查找数组:binarySearch

冒泡排序

package com.array;

import java.util.Arrays;

public class Demo04 {
    public static void main(String[] args) {
        int[] array = {1,56,34,48,56,34,78,88,25};

        //依次比较大小如果比较大则交换位置
        //每次比较都会产生有个最大,或最小的数字
        //下一轮少一次排序
        //依次循环知道结束

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

    }
    public static int[] sort(int[] arrays){
        int temp = 0;

        //外层循环
        for (int i = 0; i < arrays.length; i  ) {
            //内循环,比较两个数,如果第一个数比第二个大则交换位置
            for (int j = 0; j < arrays.length-1-i; j  ) {
                if (arrays[j 1]>arrays[j]){
                    temp = arrays[j];
                    arrays[j] = arrays[j 1];
                    arrays [j 1] = temp;
                }
            }
        }
        return arrays;
    }
}

稀疏数组

package com.array;

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

        int[][] array = new int[11][11];
        array[1][2] = 1;
        array[2][3] = 2;

        System.out.println("输出的原始数据");

        for (int[] ints : array) {
            for (int anInt : ints){
                System.out.print(anInt "\t");
            }
            System.out.println();

        }

        //转换为稀疏数组
        //获取有效值的个数
        int sum = 0;
        for (int i = 0; i < 11; i  ) {
            for (int j = 0; j < 11; j  ) {
                if (array[i][j]!=0){
                    sum  ;
                }
            }
            
        }
        System.out.println("有效值个数" sum);

        //创建稀疏数组的数组
        int[][] ints = new int[sum   1][3];
        ints[0][0]=11;
        ints[0][1]=11;
        ints[0][2]=sum;

        int count = 0;

        //遍历二维数组存放在稀疏数组中
        for (int i = 0; i < array.length; i  ) {
            for (int j = 0; j < array[i].length; j  ) {
                if (array[i][j]!=0){
                    count  ;
                    ints[count][0]=i;
                    ints[count][1]=j;
                    ints[count][2]=array[i][j];
                }
            }
        }
        //输出稀疏数组
        System.out.println("输出稀疏数组");
        for (int i = 0; i < ints.length; i  ) {
            System.out.print(ints[i][0] "\t"
                     ints[i][1] "\t"
                     ints[i][2] "\n");

        }

        //输出稀疏数组
        int[][] ints1 = new int[ints[0][0]][ints[0][1]];
        
        //还原其中元素的值
        for (int i = 1; i < ints.length; i  ) {
            ints1[ints[i][0]][ints[i][1]] = ints[i][2];
        }
        System.out.println("还原的数组");

        for (int[] ints2 : ints1) {
            for (int anInt : ints2) {
                System.out.print(anInt "\t");
            }
            System.out.println();


        }
    }
}

小结

看都看得懂,写就写不出来,很多类的要花很多时间慢慢去试

来源:https://www./content-4-856301.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多