zoukankan      html  css  js  c++  java
  • 8.数组

    1. 数组的概念

      同一种类型数据的集合。其实数组就是一个容器。运算的时候有很多数据参与运算,那么首先需要做的是什么.不是如何运算而是如何保存这些数据以便于后期的运算,那么数组就是一种用于存储数据的方式,能存数据的地方我们称之为容器,容器里装的东西就是数组的元素, 数组可以装任意类型的数据,虽然可以装任意类型的数据,但是定义好的数组只能装一种元素, 也就是数组一旦定义,那么里边存储的数据类型也就确定了。

     

    2. 数组的格式

      1)声明并给长度(前提时知道数据个数)

        int[] a = new int[3];

      2)声明但不给长度(不知道数据个数情况下)

        int[] a ;

      3)边声明边赋值

        Int[] a = {1,2,3...};

    3. 数组的遍历(for)

    public static void main(String[] args) {

      int[] x = { 1, 2, 3 };

      for (int y = 0; y < x.length; y++) {

        System.out.println(x[y]);

        // System.out.println("x["+y+"]="+x[y]); 打印效果 x[0]=1;

      } // 那么这就是数组的第一个常见操作.遍历

    }

     

    4. 数组的内存分析

     

      1)案例分析一:

     

        

        注意:0x999为内存地址,arr存储的时内存地址,而不是具体的数值

     

      2)案例分析二:

        假如有2个数组 a和b

     

        Int[] a = b;  //这个实际上是把b的内存地址给a了,而不是把b的值给a了

        

     

    5. 数组常见操作

      1)直接排序

        原理:第一轮,比较每个元素之间的大小,把最大的排在第一个。

        第二轮:比较除了第一个以外的每个值大小,把最大的放在第二位

        ...

        代码:

        public static void selectSort(int[] arr){

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

            //为什么y的初始化值是 x+1? 因为每一次比较,都用x角标上的元素和下一个元素进 行比较

            for(int y=x+1; y<arr.length; y++){

              if(arr[x]>arr[y]){

                int temp = arr[x];

                arr[x] = arr[y];

                arr[y] = temp;

              }

            }

          }

         }

     

      2)冒泡排序

        原理:比较相邻两个元素进行比较。如果满足条件就进行位置置换

        public static void bubbleSort(int[] arr){

          //-x:让每次参与比较的元素减-1:避免角标越界。

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

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

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

              int temp = arr[y];

              arr[y] = arr[y+1];

              arr[y+1] = temp;

              }

            }

          }

        }

     

      3)折半查找(二分法)

        原理:让一个数跟数组的中间索引数进行比较(数组必须先拍好序),大就查找中间索引右边的值(默认从小到大排序)然后重复上面的步骤,指导找到

        例如: 

          public static int halfSeach(int[] arr,int key){

            int min,mid,max;

            min = 0;

            max = arr.length-1;

            mid = (max+min)/2;

            while(arr[mid]!=key){

              if(key>arr[mid]){

                min = mid + 1;

              }else if(key<arr[mid]){

                max = mid - 1;  

                if(min>max)

                return -1;

                mid = (max+min)/2;

              }

              return mid;

           }

      4)数组翻转

      5)上面都是自己定义的一些方法,其实因为这些操作都是常用的功能,所以都进行了预定义了

        toString()       输出数组

        sort()         给指定数组排序

     

     

     

    6. 二维数组 

      1) 语法

        int[] a = new int[3][4];

        int[] a = {{1,2,3,4,5},{6,7,8,9},{10,11,12,13}};

      2)内存分析

        

     

     

     

  • 相关阅读:
    boot空间不足
    catkin init/build 遇到catkin:command not found 的解决办法。
    ros自定义消息的时候报错ImportError: No module named em
    Opencv——相机标定
    Spring Boot 怎么打一个可执行 Jar 包?
    代码写成这样,老夫无可奈何!
    在外包干了三年,我废了……不吹不黑!
    国庆加了三天班,公司不给钱,咋办?
    面试官问线程安全的List,看完再也不怕了!
    年轻人的第一个自定义 Spring Boot Starter!
  • 原文地址:https://www.cnblogs.com/zjdbk/p/8877269.html
Copyright © 2011-2022 走看看