zoukankan      html  css  js  c++  java
  • Java数组

    Java——数组

    1.数组概述

      数组是存储多个变量(元素)的东西(容器),这多个变量的数据类型要一致。数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。 数组既可以存储基本数据类型,也可以存储引用数据类型。数组分为:一维数组和二维数组

    2.一维数组

      1.格式

        格式1:数据类型[] 数组名;

           格式2:数据类型 数组名[];

        type var [ ] ; 或 type [ ] var ;

        注意:这两种定义做完了,数组中是没有元素值的。所以必须初始化。

      2.初始化概述

        所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。

        初始化分类:动态初始化和静态初始化。

      3.初始化方式

        动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。

        静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。

        1)动态初始化格式

           

        2)静态初始化格式

           

        3)在内存中的分配

           

          一维数组初始化后在内存中的分配图:

             

    3.二维数组

      1.概述

        其实二维数组其实就是一个元素为一维数组的数组。

      2.格式

               

      3.举例

          int a[][] = newint [3][];

        a[0] = new int [2];

        a[1] = new int [4];

        a[2] = new int [3];

       图解如下:

           

          以二维数组为例,其实二维数组就相当于数组中包含数组,所以在声明的时候要先声明第一维度,如下:

          a[0] = new int [2];    相当于给第一个包含在内的数组声明了两个小格的内存,

          a[1] = new int [4];    相当于给第二个包含在内的数组声明了四个小格的内存,

          a[2] = new int [3];    相当于给第三个包含在内的数组声明了三个小格的内存,

          理解了二维数组的概念应该就能理解多维的概念

     

      4.二维数组的初识化   

        • 静态初始化:     int intA[][] = {{1,2},{3,4},{7,8,9}};
        • 动态初始化:
        • int a[][] = new int [3] [5];
          int b[][] = new int [3][];
          b[0] = new int [2];
          b[1] = new int [3];
          b[2] = new int [5];

      5.二维数组举例  

    4.数组的拷贝

      使用java.lang.System类的静态方法:

    public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int lenth)
    • 可以同于数组src从第srcPos项元素开始的lenth个元素拷贝到目标数组从destPos项开始的length个位置
    • 如果源数据数目超过目标数组边界会抛出IndexOutOfBpundsException异常
    • 需要注意的是,修改拷贝后的数组,源数组的值也会跟着改变,因为copy后的数组和源数组在内存空间指向的是同一地址,可以参考后面的例子来理解这句话

      publicclass Test {

    public static void main(String[] args){
            //一维数组的拷贝
            String[] s = {"Mircosoft","IBM","Sun","Oracle","Apple"};
            String[] sBak = new String[6];
            System.arraycopy(s, 0, sBak, 0, s.length);
        
            for(int i=0;i<sBak.length;i++){
                System.out.print(sBak[i]+" ");
            }
            System.out.println();
            for(int i=0;i<s.length;i++){
                System.out.print(s[i]+" ");
            }
            System.out.println();
            //二维数组的拷贝
            int [][] intArray = {{1,2},{1,2,3},{3,4}};
            int [][] intArrayBak = new int[3][];
            System.arraycopy(intArray, 0, intArrayBak, 0, intArray.length);
            intArrayBak[2][1] = 100;
            for(int i = 0;i<intArray.length;i++) {
                for(int j=0;j<intArray[i].length;j++) {
                    System.out.print(intArray[i][j]+"     ");
                }
                System.out.println();
            }
        }
    }

      再看一个例子:
      
    public class Test {
        public static void main(String[] args) {       
            int a[] = {1,2,3,4};
            int b[] = {4,2,3,5,6};
            int c[];
            int c1[];
            //相当于数组扩充,观察c1和c2的输出来参考这个函数的使用方式
            c = Arrays.copyOf(b, a.length + b.length);
            c1 = Arrays.copyOf(a, a.length + b.length);
            System.out.println("c = " + Arrays.toString(c));
            System.out.println("c1 = " + Arrays.toString(c1));
            //数组拷贝
            System.arraycopy(b, 0, c, a.length, b.length);
            System.out.println("c = " + Arrays.toString(c));       
            System.out.println("a = " + Arrays.toString(a));
            System.out.println("b = " + Arrays.toString(b));   
        }
    }

    5.练习

      class PaiXu{

    public static void main(String[] args) {

    int[][] ar = {{23,21,12,14,56,67,2,6},{12,23,22,1,4},{3,4,44,33,55}};

    reverce(ar);

    printArry(ar);

    //质因数(完数)

    for (int i = 1; i <= 10000; i++) {

    int sum = 0;

    for (int j = 1; j < i/2+1; j++) {

    if (i%j==0) {

    sum += j;

    if (sum==i) {

    System.out.print(i+"  ");

    }

    }

    }

    }

    }

    private static void reverce(int[][] ar) {

    // TODO Auto-generated method stub

    //升序

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

    for (int j = 0; j < ar[i].length; j++) {

    for (int j2 = 0; j2 < ar[i].length; j2++) {

    if (ar[i][j]<ar[i][j2]) {

    int temp = ar[i][j];

    ar[i][j] = ar[i][j2];

    ar[i][j2] = temp;

    }

    }

    }

    }

    //printArry(ar);

    }

    private static void printArry(int[][] ar) {

    // TODO Auto-generated method stub

    for (int k = 0; k < ar.length; k++) {

    for (int k2 = 0; k2 < ar[k].length; k2++) {

    System.out.print(ar[k][k2]+"  ");

    }

    System.out.println();

    }

    }

    }

    //输出结果

    2  6  12  14  21  23  56  67  

    1  4  12  22  23  

    3  4  33  44  55  

    6  24  28  496  2016  8128  8190==》完数的输出结果 

    例如:

            int a[] [] = { {1,2}, {3,4,5,6}, {7,9}};

  • 相关阅读:
    [fw]PAGE_SIZE & PAGE_SHIFT & _AC()
    Memory layout of x86_64 in Linux
    Compile Linux Kernel on Ubuntu 12.04 LTS (Detailed)
    ret/retn人为改变执行地址
    [fw]LINUX中断描述符初始化
    查看x86主機是否支援64bit in Linux
    Linux.中断处理.入口x86平台entry_32.S
    [fW]中断处理函数数组interrupt[]初始化
    Linux GNU GAS introduction
    洛谷试炼场 3-5数论 3-17 倍增
  • 原文地址:https://www.cnblogs.com/hh2012/p/9967866.html
Copyright © 2011-2022 走看看