zoukankan      html  css  js  c++  java
  • 数组

     

    1.1   数组的概念

    1.1.1     数组基础

    数组(Array)是相同数据类型的数据的有序集合。

    数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。

    数组是引用数据类型。

    特点

    [1]数组长度是确定。数组一旦申请完空间,长度不能发生变化,用length属性访问。

    [2]数组的元素都是同一数据类型。

    [3]数组是有序的 。每个元素通过下标/索引标记,索引从0开始。

    1.1.2     内存空间分类(C)

    内存分为两类:

    栈(stack)内存:基本数据类型分配在栈内存,栈内存空间不需要开发者回收,系统会自动回收。栈空间占整个内存空间的比例较小。

     

    堆(heap)内存:引用数据类型分配在堆内存,堆内存一定要开发者通过new 来申请,开发者申请的内存使用完成后一定要回收。jvm中有专门的垃圾回收机制(gc)回收使用完的堆内存。堆空间占整个内存空间的比例较大。

    1.2   数组的声明

    声明数组有两种方式

    数据类型[] 变量 -–>推荐写法

    数据类型 变量[]

    案例:声明一个数组申请空间并赋值

    public class Test01{

        public static void main(String[] args){

           // 声明一个数组

           // int arr[];

          

           int a;

          

           // 【1】声明数组变量

           int[] arr;

          

           // 【2】给数组变量分配空间

           // 给arr申请了5个连续的整形的int空间。

           arr = new int[5];

          

           // 【3】给每个空间赋值

           arr[0] = 10;

           arr[1] = 20;

           arr[2] = 30;

           arr[3] = 40;

           arr[4] = 50;

          

           // 【4】访问元素

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

           System.out.println(arr[1]);

           System.out.println(arr[2]);

          

           // System.out.println(arr[5]);

        }

    }

    1.2.1     数组的内存空间

                                         stack(栈)

                                          heap(堆)

     

    1.2.2     数组声明的其他方式

    标准的声明和赋值方法过于复杂,可以使用简写的方式

    数据类型[] arr = new int[]{值1,值2,…}:例如 int [] arr = new int{1,2,3}

    jvm根据后面值的个数申请空间并把值赋值到对于空间。

    public class Test02{

        public static void main(String[] args){

          

           // 【1】数组的声明方式

           int[] arr = new int[5];

           arr[0] = 10;

           arr[1] = 20;

           System.out.println(arr);

          

           // 【2】值声明

           int[] arr2;

           arr2 = new int[]{10,20,30,40,50};

          

           // int[] arr2 = new int[]{10,20,30,40,50};

           System.out.println(arr2.length);

          

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

           System.out.println(arr2[4]);

          

          

           // 【3】数组的字面量声明

           int[] arr3 = {10,20,30,40};

          

           // 字面量声明不支持分开赋值

           /*

           int[] arr3;

           arr3 = {10,20,30,40};

           */

           System.out.println(arr3.length);

          

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

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

          

          

        }

    }

    1.2.3     数组的遍历

    public class Test03{

        public static void main(String[] args){

          

           int[] arr = {10,20,30,40,50};

           // 0-4

           for(int i=0;i < arr.length;i++){

               System.out.println("arr[" + i + "]" + "=" + arr[i]);

           }

        }

    }

    需求:从控制台输入5个学生的成绩,并求平均分?

    import java.util.Scanner;

    public class Test04{

        public static void main(String[] args){

          

           float[] arr = new float[5];

           Scanner sc = new Scanner(System.in);

          

           float sum = 0.0f;

           for(int i=0;i<arr.length;i++){

               System.out.println("请输入第"+(i+1)+"位学生成绩:");

               arr[i] = sc.nextFloat();

               sum += arr[i];

           }

           float avg = sum / arr.length;

           System.out.println("平均分:"+avg);

        }

    }

    1.3   数组的常用算法

    1.3.1     插入算法

    一个数组有序,添加一个元素后,数组依然有序。

    public class Test07{

        public static void main(String[] args){

          

           // 一个有序的数组,向该数组中添加一个元素,数组依然有序。

           int[] arr = {1,3,7,9,12,20,0};

           int t = 0;

          

           // 【1】找位置

           int loc = -1; // 表示t应该添加到的位置

           for(int i = 0;i<arr.length-1;i++){

               if(arr[i] >= t){

                  loc = i;

                  break;

               }

           }

          

           System.out.println("loc = "+loc);

          

           if(loc < 0){ // 没找到合适的位置

               arr[arr.length-1] = t;

           }else{

               // 【2】依次后移

               for(int j=arr.length-1;j>loc;j--){

                  arr[j] = arr[j-1];

               }

               // 【3】添加插入的值

               arr[loc] = t;

           }

          

           // 验证

           for(int i = 0;i<arr.length;i++){

               System.out.print(arr[i]+" ");

           }

        }

    }

    1.3.2     删除算法

    一个有序的数组,删除一个元素后依然有序。

    public class Test08{

        public static void main(String[] args){

          

           // 删除算法

           int[] arr = {1,3,7,9,12,20};

           int t = 1;

          

           // 【1】找位置

           int loc = -1;

           for(int i=0;i<arr.length;i++){

               if(t == arr[i]){

                  loc = i;

                  break;

               }

           }

          

           // 【2】移动元素

           if(loc < 0){

               System.out.println(t+"在数组中不存在");

           }else{

               for(int j = loc;j<arr.length-1;j++){

                  arr[j] = arr[j+1];

               }

              

               // 【3】最后一个元素置0

               arr[arr.length-1] = 0;

           }

          

           // 验证

           for(int i = 0;i<arr.length;i++){

               System.out.print(arr[i]+" ");

           }

          

        }

    }

    1.3.3     冒泡排序算法

     

    public class Test10{

        public static void main(String[] args){

           // 对一个无序的数组进行排序

           int[] arr = {10,5,3,4,2,9,7};

          

           int tmp = 0;

           for(int i=0;i<arr.length-1;i++){ // 外层控制趟数

              

               for(int j=0;j<arr.length-1-i;j++){ // 两两比较

                 

                  if(arr[j]>arr[j+1]){

                      tmp = arr[j];

                      arr[j] = arr[j+1];

                      arr[j+1] = tmp;

                  }

               }

           }

          

           for(int i=0;i<arr.length;i++){

               System.out.print(arr[i]+" ");

           }

          

        }

    }

  • 相关阅读:
    Linux开发环境必备十大开发工具
    mysql executemany与 insert ... ON DUPLICATE KEY UPDATE 一起使用
    python LD_LIBRARY_PATH 靠谱解决办法
    搭建简单ftp,满足windows和ubuntu共享文件
    用类方法作为装饰器装饰同属于本类的另一个方法
    通过类方法名调用类方法
    java将jpg文件转化为base64字节(互转)
    CSS元素居中的方式
    T-SQL语法学习一(持续更新)
    SVN的使用教程(一)
  • 原文地址:https://www.cnblogs.com/xfbb/p/10721046.html
Copyright © 2011-2022 走看看