java数组

数组

数组是相同类型数据的有序集合;

描述的是相同类型的若干个数据,按照一定的先后顺序组合;

每个数据称为一个数组元素,每个数组元素可以通过一个小标来访问。

数组的特点
  • 数组的长度是确定的。数组被创建后,它的大小是不可变的。
  • 数组的元素必须是相同的类型。
  • 数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,java中对象是在堆中的,因此数组无论保存的是原始类型还是其他对象类型,数组对象本身是在队堆中的。

数组的声明及创建

必须先声明才可以使用,使用new创建数组,为其分配空间

有两种声明数组的方式:

//变量类型 变量名 = 变量值
int[] array = new int[10]; //存放十个数据
int array1[] = new int[10];

数组的初始化

//静态初始化
int[] a = {1,2,4,4};
//动态初始化 包含默认初始化
int[] b = new int[10];
a[0]=1;
a[1]=2;
...
//默认初始化
//未给b[5]赋值时,输出b[5]值为0,默认为int类型的默认值

数组的边界

数组的下标(0—length-1)

java内存分析:

声明数组是在栈中压入一个array,创建数组时为数组在堆中分配一段空间,栈中array中存储的是堆中new的数据的地址,为数组的每个元素赋值时,将数据存入堆中的空间。

多维数组

多维数组可以看成是数组的数组,数组中的元素也是数组。

二维数组是一个特殊的一维数组,其中的每个元素都是一个一维数组。

Arrays类

java.util.Arrays

其中包含用于操作数组的各种方法(排序、搜索等)。该类中还包含一个静态工厂,可以将数组看做列表。

Arrays中的方法都是static修饰的,可以直接使用类名调用。

public static void main(String[] args){
    int array = {4445,2,5,788,4,16,6};
    //使用fill对数组填充 将指定的值分配给指定字节数组中的每个元素
    /**
    * array 要填充的数组
    * val 填充的值
    **/
    Arrays.fill(array,1); //数组的每个元素都为1
    Arrays.fill(array,2,4,1); //数组下标在[2到4)之间的元素为1
    //打印数组元素Arrays.toString
    System.out.print(Arrays.toString(array));
    //数组快速排序 升序
    Arrays.sort(array);
    //通过equals方法比较数组的元素值是否相同
    //查找数组元素:binarySearch对排序好的数组进行二分查找法
}

稀疏数组

数组中大部分元素为0,或为同一值时,可以使用稀疏数组来保存该数组。(数据结构的思想)

处理方式:

  • 记录数组一共有几行几列,有几个不同的元素
  • 把具有不同值的元素的行、列、值记录在一个小规模的数组中,从而缩小程序的规模。
 public static void testGobang(){
     //创建一个二维数组11*11 0:没有棋子 1:黑棋 2:白棋
     int[][] array1 = new int[11][11];
     array1[5][2]=2;
     array1[4][3]=1;
     //转换为稀疏数组
     //获取有效值的个数
     int sum = 0;
     for (int i = 0; i < 11; i++) {
         for (int j = 0; j < 11; j++) {
             if (array1[i][j]!=0){
                 sum++;
             }
         }
     }
     //创建一个稀疏数组
     int[][] array2 = new int[sum+1][3];
     array2[0][0]=11; //总行数
     array2[0][1]=11; //总列数
     array2[0][2]=sum; //有效值个数

     //输出稀疏数组
     int count=0; //记录稀疏数组的行
     for (int i = 0; i < array1.length; i++) {
         for (int j = 0; j < array1.length; j++) {
             if (array1[i][j]!=0){
                 count++;
                 array2[count][0]=i; //记录行
                 array2[count][1]=j; //记录列
                 array2[count][2]=array1[i][j]; //有效值
             }
         }
     }
     //打印稀疏数组
     for (int i = 0; i < array2.length; i++) {
         System.out.println(array2[i][0]+"\t"
                            +array2[i][1]+"\t"
                            +array2[i][2]+"\t");
     }
 }

结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值