zoukankan      html  css  js  c++  java
  • day11

    day11

    数组

    数组定义和声明

    package array;
    public class ArrayDemo01 {
        //变量的类型 变量的名字 = 变量的值;
        //数组类型
        public static void main(String[] args) {
            int[] nums;//1.定义,声明了一个数组
            int nums2[];//栈里分配了nums的空间,但是没有内容
            nums = new int[10];//这里面可以存放10个int类型的数字。2.创建一个数组
            //new数组之后,在堆中开辟了一个对应数组大小的空间
            int[] nums1 = new int[10];
            //3.给数组元素中赋值
            nums[0]=1;
            nums[1]=2;
            nums[2]=3;
            nums[3]=4;
            nums[4]=5;
            nums[5]=6;
            nums[6]=7;
            nums[7]=8;
            nums[8]=9;
            nums[9]=10;
            System.out.println(nums[9]);
            //计算所有元素的和
            int sum = 0;
            for(int i = 0;i<nums.length;i++){
                sum = sum+nums[i];
            }
            System.out.println("总和为"+sum);
    
        }
    }
    

    数组初始化

    package array;
    
    public class ArrayDemo02 {
        public static void main(String[] args) {
            //静态初始化:创建+赋值
            int[] a = {1,2,3,4,5,6,7,8};
    
            System.out.println(a[0]);
            //动态初始化:包含默认初始化
            int[] b = new int[10];
            b[0] = 10;
            System.out.println(b[0]);
            System.out.println(b[1]);
        }
    }
    
    

    数组的四个基本特点
    1.数组长度是确定的,数组一旦被创建,它的大小就是不可改变的
    2.数组元素必须是相同类型的,不允许出现混合类型
    3.数组的元素可以使任何数据类型,包括基本类型和引用类型
    4.数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于对象的成员变量
    数组本身就是对象,java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的


    数组小结:
    数组是相同数据类型(可以为任意类型)的有序集合
    数组也是对象,数组元素相当于对象的成员变量
    数组的长度是确定的(下标区间【0,length-1】,不可变的,如果越界则报错:ArrayIndexOutofBounds

    数组使用

    package array;
    
    public class ArrayDemo03 {
        public static void main(String[] args) {
            int[] arrays = {1,2,3,4,5};
            //打印全部的数组元素
            for (int i = 0; i <arrays.length ; i++) {
                System.out.println(arrays[i]);
            }
            System.out.println("=============");
            int sum = 0;
            for (int i = 0; i <arrays.length ; i++) {
                sum = sum + arrays[i];
            }
            System.out.println("sum="+sum);
            System.out.println("======");
            //查找最大元素
            int max =arrays[0];
            for (int i = 1; i <arrays.length ; i++) {
                if(max < arrays[i]){
                    max = arrays[i];
                }
            }
            System.out.println("max="+max);
        }
    }
    

    package array;
    
    public class ArrayDemo04 {
        public static void main(String[] args) {
            int[] arrays = {1,2,3,4,5};
            //JDK1.5 没有下标
            for (int array:arrays){
                System.out.println(array);
            }
            printArray(arrays);
    
            int[] reverse = reverse(arrays);
            printArray(reverse);
        }
        
        //打印数组元素
        public static void printArray(int[] arrays){
            for (int i = 0; i <arrays.length ; i++) {
                System.out.print(arrays[i]+" ");
            }
            System.out.println();
        }
    
        //反转数组
        public static int[] reverse(int[] arrays){
            int[] result = new int[arrays.length];
            //反转的操作
            for (int i = 0,j=arrays.length-1; i < arrays.length; i++,j--) {
                result[i]=arrays[j];
            }
            return result;
        }
    
    }
    

    多维数组

    package array;
    
    public class ArrayDemo05 {
        public static void main(String[] args) {
            //多维数组
            // [4][2]
            /*
            1,2 array[0]
            2,3 array[1]
            3,4 array[2]
            4,5 array[3]
             */
            int[][] array = {{1,2},{2,3},{3,4},{4,5}};
            //System.out.println(array[0]);
            printArray(array[0]);
            System.out.println(array[0][0]);
            System.out.println(array[0][1]);
            System.out.println(array.length);
            System.out.println(array[0].length);
    
            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();
    
            }
        }
    
        public static void printArray(int[] arrays){
            for (int i = 0; i <arrays.length ; i++) {
                System.out.print(arrays[i]+" ");
            }
            System.out.println();
        }
    }
    

    冒泡排序

    package array;
    
    import java.util.Arrays;
    
    //
         */
    public class ArrayDemo07 {
        public static void main(String[] args) {
    
            int[] a = {3,45,46,4,2,5,7,56};
            int[] sort = sort(a);
            System.out.println(Arrays.toString(sort));
    
        }
        public static int[] sort(int[] array){
            //临时变量
            int temp = 0;
    
            //外层循环,判断我们这个循环要走多少次
            for (int i = 0; i < array.length-1; i++) {
                //内层循环,比较判断两个数,如果第一个数比第二个数大,则较换位置
                boolean flag = false;
                for (int j = 0; j < array.length-1-i; j++) {
                    if(array[j+1]<array[j]){
                        temp = array[j+1];
                        array[j+1]= array[j];
                        array[j] = temp;
                        flag = true;
                    }
    
                    }
                    if (flag == false){
                        break;
                }
            }
            return array;
            
        }
    }
    

    冒泡排序
    1.比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换他们额位置
    2.每一次比较,都会产生一个最大或者最小的数字
    3.下一轮则可以少一次排序
    4.依次循环,知道结束
    时间复杂度为O(n2)

    稀疏数组

    package array;
    public class ArrayDemo08 {
        public static <array1> void main(String[] args) {
            /*
            1.创建一个二维数组11*11     0:没有棋子, 1:黑旗    2:白旗
             */
            int[][] array1 = new int[11][11];
            array1[1][2] = 1;
            array1[2][3] = 2;
            //输出原始的数组
            System.out.println("输出原始的数组");
    
            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();
            }
            System.out.println();
            for (int[] ints : array1) {
                for (int anInt : ints) {
                    System.out.print(anInt + "	");
                }
                System.out.println();
            }
    
            //转换为稀疏数组保存
            //获取有效值的个数
            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 = sum + 1;
                    }
                }
            }
            System.out.println("有效值的个数" + sum);
    
            //2.创建一个稀疏数组的数组
            int[][] array2 = new int [sum+1][3];
            array2[0][0] = array1.length;
            array2[0][1] = array1[1].length;
            //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]+"	"
                +array2[i][1]+"	"+array2[i][2]+"	");
            }
    
            System.out.println("==========");
            System.out.println("还原");
            //1.读取稀疏数组
            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[] ints : array3) {
                for (int anInt : ints) {
                    System.out.print(anInt+"	");
                }
                System.out.println();
            }
        }
    }
    

    稀疏数组:
    当一个数组中大部分元素为0.或者为同一值得数组时,可以使用稀疏数组来保存。
    稀疏数组的处理方式:
    记录数组一共有几行几列,有多少个不同值
    把具有不同值得元素的行列及值记录在一个小规模数组中,从而缩小程序规模。

    2020.11.20 11:56

  • 相关阅读:
    Swift之类型安全和类型推断
    Swift之浮点数
    Swift之整数
    泛互联网产品技术支持划分
    WPF WebBrowser 不可见问题的解析[转]
    form WebBrowser自动点击弹出提示框alert、弹出对话框confirm、屏蔽弹出框、屏蔽弹出脚本错误的解决办法
    Mvvm绑定datagrid或listview的selectItems的方法[转]
    [C#]获取最近在Windows上所使用的文件
    拷贝构造函数和赋值运算符重载的区别
    Why Doesn’t Drag-and-Drop work when my Application is Running Elevated? – A: Mandatory Integrity Control and UIPI(转载)
  • 原文地址:https://www.cnblogs.com/vae-469395/p/14010172.html
Copyright © 2011-2022 走看看