Java中与数组有关的知识

Java中的数组

一、数组的定义

  • 数组是相同类型数据的有序集合
  • 数组的描述是相同类型的若干个数据,按照一定的先后次序排列组合而成
  • 其中,每个数据称作一组元素,每个数组元素可以通过一个下标来访问它们

二、数组的声明的创建

public class Array {
    static public void main(String[] args)
    {
        //静态初始化一个叫叫a的数组
        int[] a={1,2,3,4,5,6};
        //动态初始化一个叫array的int型数组
        int[] array=new int[10];
        //获取数组的长度
        int len=array.length;
        //逐个为数组赋值
        for(int i=0;i<len;i++)
        {
            array[i]=i;
        }
        //逐个遍历数组
        for(int j=0;j<len;j++)
        {
            System.out.println(array[j]);
        }
    }
}

  • 数组的内存分析

    • Java的内存分析
      • 堆:存放new的对象和数组,可以被所有的线程共享,不会存放别的对象引用
      • 栈:存放基本变量类型(会包含这个基本类型的具体数值)、引用对象的变量(会存放这个引用在堆里面的具体地址)
      • 方法区:可以被所有的线程共享、包含了所有的class和static变量
  • 数组的四个基本特点

    • 长度是确定的,数组一旦被创建,大小就是不可以改变的
    • 其元素必须是相同的类型,不允许出现混合类型
    • 数组中的元素可以是任何数据类型,包括基本类型和引用类型
    • 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中的对象是在堆中的
  • 数组下标越界

    • 数组的合法区间是[0,length-1],越界就会报错ArrayIndexOutOfBoundsException

三、数组使用

1.for-each循环(没有下标)

​ idea中打array.for自动生成

public class Array {
    static public void main(String[] args)
    {
        //声明一个叫array的int型数组
        int[] array=new int[10];
        int len=array.length;
        //逐个为数组赋值
        for(int i=0;i<len;i++)
        {
            array[i]=i;
        }
        for (int i : array) {
            System.out.println(i);
        }
    }
}

2.数组作方法传参

public class Array {
    static public void main(String[] args)
    {
        //声明一个叫array的int型数组
        int[] array=new int[10];
        int len=array.length;
        //逐个为数组赋值
        for(int i=0;i<len;i++)
        {
            array[i]=i;
        }
        System.out.println(sum(array));

    }
    static int sum(int[] array)
    {
        int sum=0;
        for (int i : array) {
            sum=sum+array[i];
        }
        return sum;
    }
}

3.数组作返回值

public class Array {
    static public void main(String[] args)
    {
        //声明一个叫array的int型数组
        int[] array=new int[10];
        int len=array.length;
        //逐个为数组赋值
        for(int i=0;i<len;i++)
        {
            array[i]=i;
        }
        array=reverse(array);
        for (int j =0;j<len;j++) {
            System.out.println(array[j]);
        }
    }
   static int[] reverse(int[] a)
   {
        int[] result=new int[a.length];
       for(int i=0,j=a.length-1;i<a.length;i++,j--)
       {
           result[j]=a[i];
       }
       return result;
   }
}

四、多维数组

  • 多维数组可以是数组的数组,比如一个二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组

  • 定义方法

    int a[][]=new int [2][5];
    

五、Arrays类

六、冒泡排序

七、稀疏数组

原始数组中只有两个数为非零数,其他都是0

00000000000
00100000000
00020000000
00000000000
00000000000
00000000000
00000000000
00000000000
00000000000
00000000000
00000000000

建立一个新的数组,第一行存放原始数组的行和列以及非零数的个数n

剩下的n行来存放非零数的行和列以及对应的数值

11113
121
232

代码

public class SparseArray {
    static public void main(String[] args)
    {
        //构造原始矩阵
        int[][] array=new int[11][11];
        array[1][2]=1;
        array[2][3]=2;
        show(array);
        //遍历原始矩阵,找出非0元素的个数count
        int count=0;
        for(int[] i:array)
        {
            for(int j:i)
            {
                if(j!=0)
                {
                    count++;
                }
            }
        }
        //转换为稀疏矩阵
        int[][] array2=new int[count+1][3];
        //第一行存11行11列共count个非零数
        array2[0][0]=11;
        array2[0][1]=11;
        array2[0][2]=count;
        //接下来每行存非零数在第几行第几列是几
        int line=0;
        for(int i=0;i<array.length;i++)
        {
            for(int j=0;j<array[i].length;j++)
            {
                if(array[i][j]!=0)
                {
                    line++;
                    array2[line][0]=i;
                    array2[line][1]=j;
                    array2[line][2]=array[i][j];
                }
            }
        }
        show(array2);
        //稀疏矩阵转化为原始矩阵
        int[][] array3=new int[array2[0][0]][array2[0][1]];
        for(int i=1;i<array2.length;i++)
        {
            array3[array2[i][0]][array2[i][1]]=array2[i][2];
        }
        show(array3);
    }
    //打印一个二维矩阵
    static public void show(int[][] a)
    {
        for(int i[]:a)
        {
            for(int j:i)
            {
                System.out.print(j+" ");
            }
            System.out.println();
        }
    }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值