zoukankan      html  css  js  c++  java
  • 数组的详细总结

    1.数组的分配 

    特点:

    1.1分配空间连续     2.空间不可扩充     3.空间的存储类型相同 

    ps:初始化为0或null,Boolean默认false

    2.数组的排序

    Arrays.sort(a1);//util包中 

    3.数组的扩充(重点了哦)==

    3.1 第一种方法:直接破2333

      int a1={1,2,3}; 

      int a2[] = new int[a1.length * 2];
     for(int i=0;i<a1.length;i++){
     a3[i]=a1[i];
     }

      a1=a3;

    3.2 第二种方法:调用System中的arraycopy()

    System.arraycopy(a1,1, a2, 5, a1.length-2);//可以选择copy的起始点和长度
     a1=a3;

    3.3 第三种方法:调用Arrays中的CopyOf():   从源码可知本质还是system.arraycopy(),但是方便了从首位copy数组的类型

    int a4[] = Arrays.copyOf(a1, 4);
    a1 = a4;


    其实选择System中的arraycopy()还是Arrays中的CopyOf(): 主要看你的适用类型:

    如果是直接从首位开始copy,那后者明显方便了不少,反之你对数组的copy有自己的要求前者更佳

    当然 你想要第一种直接破也不是不可以2333


    小结:归根究底,数组的扩充就是

    1.重新分配一个空间更大的数组,

    2.将老数组的内容复制过去

    3.将老数组指向新数组的地址

    这里你需要了解一点:就是数组的存储空间在堆,然而它的识别变量却在栈里(存储堆对象的地址)

    例子:

    int test[]=new int[]{1,2,3};//test存储在栈里(堆对象的地址){1,2,3}在堆空间


    4.二维数组

    其实就是一维数组中存储的不是其他类型变量而是数组,以此类推就是三维、四维数组了呗(冷漠脸)


    最后国际惯例,附上我的练习代码君:

    package com.jacob.javase;


    import java.util.Arrays;


    /*
     * 数组的详细探讨:
     */
    public class ArrayTest {


    public static void main(String[] args) {
    // 1.数组的分配 特点:1.分配空间连续 2.空间不可扩充 3.空间的存储类型相同 ps:初始化为0或null/
    // int a[] = new int[10];
    // 2.不同的声明方式:
    int a1[] = new int[] { 1, 2, 3 };
    // int a2[] = { 2, 3, 4 };
    // 思考a1[0]为多少
    int b[] = a1;
    b[0] = 666;
    // 3.数组的排序
    Arrays.sort(a1);
    // 4.数组的扩充:1.创建一个新数组2.将老数组复制过去3.将老数组指向新数组地址
    // 4.1 第一种方法:
    int a3[] = new int[a1.length * 2];
    // for(int i=0;i<a1.length;i++){
    // a3[i]=a1[i];
    // }
    // a1=a3;
    // 4.2 第二种方法:明确了起始位置和复制的长度
    // System.arraycopy(a1,1, a3, 5, a1.length-2);
    // a1=a3;
    // 4.3 第三种方法:直接从首位开始复制(本质还是system.arraycopy())
    int a4[] = Arrays.copyOf(a1, 4);
    a1 = a4;
    // 5.二维及多维数组
    // 二维数组的长度
    boolean t[][] = { {}, { true } };// 数组已经分配了地址空间,第一个地址空间中没存东西;第二个中存的是true
    // 这种命名就相当于 不给初始化的一维数组(所以为null):debug可以清晰的看出来;
    boolean t1[][] = new boolean[2][];
    boolean t2[] = new boolean[2];
    t1[0] = new boolean[3];
    t1[1] = new boolean[2];
    // System.out.println(t.length + "," + t[0].length + "," + t[1].length);
    // System.out.println(t1.length + "," + t1[0] + "," + t1[1]);
    // System.out.println(t2.length + "," + t2[0] + "," + t2[1]);
    // print1(a1);
    print2(t1);
    }


    // 封装遍历一维数组
    public static void print1(int a[]) {
    for (int i = 0; i < a.length; i++) {
    System.out.print(a[i] + " ");
    }
    }


    // 封装遍历二维数组
    public static void print2(boolean a[][]) {
    for (int i = 0; i < a.length; i++) {
    for (int j = 0; j < a[i].length; j++) {
    System.out.print(a[i][j] + ",");
    }
    System.out.println("");
    }
    }
    }


    最后:共同学习,一起进步 >,<






  • 相关阅读:
    DEV—【GridControl添加按钮列】
    DEV—【GridControl主从表】
    DEV—【GridControl 按钮列无法触发点击事件解决方案】
    WCF入门大致思路
    .Net应用导入、导出Excel文件
    .Net应用自定义鼠标样式
    VS打包后生成快捷方式:目标指向错误、Icon图标分辨率有误问题解决方案
    在Paint事件中绘制控件(边框)
    Android SDK Manager下载失败后 更新列表的正确设置
    关于sql分页
  • 原文地址:https://www.cnblogs.com/xieji233/p/6155656.html
Copyright © 2011-2022 走看看