zoukankan      html  css  js  c++  java
  • 8.11Java之数组知识回顾

    8.11Java之数组知识回顾

    数组

    • 一维数组的定义与使用方式

    • 数组基本练习

    • Arrays工具类

    • 案例---点名器

    • 二维数组

    数组定义

    相同类型数据的有序集合

    • 一开始大小固定--->开始初始化

    • 数组本身属于引用类型--->初始化需要new一个对象并且开辟空间

    • 数组中可以存储任意类型的数据

    创建数组时的内存分配说明

    数组的使用

    通过索引去使用数组:

    数组的遍历方式

    普通for循环:

    增强for循环:--->因为数组本身是一个对象

    普通for循环打印数组内容
        /**
        * 普通for循环方法
        */
       public static void forArray(){
           int[] number = {1,2,3,4,5};
           for (int i=0; i<number.length; i++){
               System.out.println(number[i]);
          }
      }
    增强for循环打印数组内容
        /**
        * 增强for循环打印数组内容
        */
       public static void forEachArray(){
           int[] number = {5,4,3,2,1};
           for (int num : number){
               System.out.println(num);
          }
      }

    这两种打印方法在本质上是有区别的主要区别在内存上:

    普通for循环:

    • 打印的number[i]中这个"i"是一个引用

    增强for循环:

    • 将堆内存的数组中的值取出,放入到变量num当中,再去打印出。不便于引用

    数组的关键理解
        /**
        * 数组赋值的方法
        */
       public static void changeArray(){
           //int[] number = {};
           /*
           上面这个写法实际上在堆内存当中并没有开辟对象空间
           所以之前直接循环是无法对数组进行赋值
           基本数据类型的数组无法使用动态分配的方式进行赋值
           因为基本数据类型不需要new一个对象去创建。即便使用包装类那么返回的也是一个基本数据类型的值
           而该值不需要创建对象
            */
           int[] number = new int[10];
           for (int i=0; i<10; i++){
               number[i] = 10*(i-1);
               System.out.println(number[i]);
          }
      }

       /**
        * 动态分配空间赋值
        */
       public static void changeArrays(){
           int[] number = {};
           for (int i=0; i<number.length; i++){
               number[i] = new Integer(10*(i-1));
               System.out.println(number[i]);
          }
           /*
           可以通过编译,但是没有结果
            */
      }
    数组练习
        /**
        * 遍历char数组,倒序输出数组内容
        * @param arr
        */
       public static void print(char[] arr){
           for (int i=arr.length-1; i>=0; i--){
               System.out.println(arr[i]);
          }
      }
        /**
        * 遍历int数组,获取最大值和最小值
        * @param arr
        */
       public static void printMaxMin(int[] arr){
           int max = arr[0];
           int min = arr[arr.length-1];
           for (int i=0; i<arr.length; i++){
               if (arr.length==1){
                   System.out.println(arr[i]);
              }else {
                   if (arr[i]>max){
                       max = arr[i];
                  }else if (arr[i]<min){
                       min = arr[i];
                  }
              }
          }
           /*
           抓头尾设为变量,然后用数据进行比较
           因为是比较大小所以需要比较必须有比较的对象
            */
           System.out.println(max);
           System.out.println(min);
      }
        /**
        * 实现一个随机的点名器
        *     使用循环去读取多对象--->设置索引为随机的
        * @param arr
        */
       public static void randomPrintName(String[] arr){
           int randomnumber = (int) (Math.random()*arr.length);
           System.out.println(arr[randomnumber]);
      }

    多维数组

    本章以二维数组进行举例

    二维数组的定义:

    数组中套数组

    定义二位数组

    实例:

    static int[][] doubleArray = {{1,2},{2,3},{3,4}};
    //如果使用的是直接定义长度的话
    //不同维度的数组可以定义不同的空间长度

    打印二维数组内的内容

    实例:

        public static void print(int[][] arr){
           for (int[] num : arr){
               for (int number : num){
                   System.out.println(number);
              }
               System.out.println(num);
          }
      }

    num为引用,打印出来的是一个hash地址

    number为内容的引用,打印出来的是具体值

    二维数组的内存分析举例

    注意:

    • 无论几维数组,都是引用类型

    • 其对象分配的空间都在堆中

    给二维数组定义长度
        static int[][] doubleArrays = new int[5][]; //这里就没有定义二维数组的长度
       public static void createSpace(int[][] arr){
           arr[0] = new int[2];
           arr[0][1] = 1;
           System.out.println(arr[0][1]);
           /*
           因为要给二维数组的内部再进行长度定义,那么需要找到一位数组的索引
           然后再通过新建对象的方法给该索引下的空间进行长度定义
            */
      }

     

  • 相关阅读:
    (转)Android IPC机制详解
    (转)android 多线程
    (转)android进程间通信:使用AIDL
    (转)如何调用SQLITE工具查看数据库
    (转)Android 自动 打包
    (转)如何手动编译一个APK
    (转)编译Android源码的全过程
    Js打造层拖动实例:网站菜单拖拽移位效果
    JS鼠标悬停时动态翻滚的紫色导航条
    jQuery1.3.2竖向的伸缩菜单
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/15129871.html
Copyright © 2011-2022 走看看