浅说-JAVA数组

数组的基本概念及作用:

1.数组是相同数据类型元素的集合。

2.数组不同于基本数据类型,是一种引用数据类型,即数组也是可被创建的对象,作为一种基本容器,数组可以存储同一基本数据类型,也可以存储对象

3.数组是一种特殊的数据结构,数组在内存中是一片连续的存储空间。

数组的特点和声明

数组的大小一旦声明便不可更改,数组名既是数组在内存中的首地址。

可以通过数组下标(索引)访问存储在数组中的元素;需要注意的一点是:这里的下标是从0开始的,而实际的物理顺序是从1开始的!

下面是数组的第一种声明方式:

此种方式一般用于已知存储大小,内容未定的情况,未给定初始值时,数组会自动以默认值填补。

例:

int[] a=new int[10];

这里声明了一个大小为10的数组a,数组a是int类型数组,由于未进行赋值,数组会自动用0进行填充,数组的声明过程实质上是申请一片了以数组名a为首地址的连续存储空间,根据数组类型会进行默认值填充。

如下代码可进行验证

System.out.println(a.length);
System.out.println(Arrays.toString(a));

需要注意的一点是在JAVA中System.out.print()语句默认输出的是对象在数组中的存储地址,即对象的Hash值,对于数组这一引用类型,需要调用Arrays.toString()方法.

Arrays.toString()会以String的形式返回数组中存储的数据

第二种声明方式:

该种方式可直接进行数组元素的初始化,不需要指定数组的大小,适用于存储内容已知的情况

int[] b=new int[]{1,2,3,4};

第三种声明方式:

String[] str={"我",“是”,“中”,“国”,“人”};

查看str数组的hash值

System.out.println(str.hashcode());

需要注意的一点是对于String类型的数组,当str为空时,数组会全部以null这一关键字进行填充.

数组元素的访问,以及数组对象属性探究:

数组对象的存储能力是有限的,不仅受到存储类型的影响,在实际运用中还会受到系统等硬件的影响。

1.数组的存储上限

以int举例:

可通过Integer.MAX_VALUE获得int数组的存储上限

实际上,由于操作系统的限制,以及内存碎片化的影响,往往无法申请到Integer.MAX_VALUE个连续的存储空间.

数组常被广泛用于排序和查找等数据整理工作

这里介绍十大常用排序算法中较为基础的两种:

冒泡排序,利用循环嵌套实现代码如下:

这里使用循环生成0-7的数组

int[] array2=new int[8];
for (int i = 0; i < array2.length; i++) {
    array2[i]=i+1;
}

该算法的特点是原始数组有序程度越高,该算法的时间复杂度越高,最多需要比较数组.length-1趟.

for (int i = 0; i < array2.length-1; i++) {
    for (int j = 0; j < array2.length-(i+1); j++) {
        //降序排序
        if(array2[j]<array2[j+1]){
            //设置中间值保存变量
            int middlevalue=array2[j];
            array2[j]=array2[j+1];
            array2[j+1]=middlevalue;
        }
    }
}

  选择排序:

   该算法的基本思想为:

   每次选出第i+1大/小的元素并放入i位置,该算法与冒牌排序相反,原始数据有序程度越高,该算  法时间复杂度越低

    升序排列实现代码如下:

    

for (int i = 0; i < array2.length-1; i++) {
    //array[j]存储的是被比较元素
    for (int j = i+1; j < array2.length; j++) {
        if (array2[i]>array2[j]){
            int middlevalue=array2[i];
            array2[i]=array2[j];
            array2[j]=middlevalue;
        }
    }
    System.out.println("第"+(i+1)+"次排序结果为:");
    System.out.println(Arrays.toString(array2));
}

  最后简单介绍一下二维数组的声明与遍历:

   

int[][] array3=new int[4][];
//此时array3的存储情况为:{null,null,null,null}
//具体创建array3中的一维数组
for (int i = 0; i < array3.length; i++) {
        array3[i]=new int[array3.length];
}

   二维数组创建完毕后使用两种方式对二维数组进行遍历:

   1.将Arrays.toString()方法放入循环内部,通过数组下标i进行遍历,但这是一种较为粗糙的遍历,只能进行简单地提取,无法对单个元素进行操作。      

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

{ System.out.println(Arrays.toString(array3[i])); }

     2.通过循环嵌套进行逐个遍历   

     通过循环嵌套进行遍历 for (int i = 0; i < array3.length; i++) { for (int j = 0; j < array3[i].length; j++) {

System.out.println(array3[i][j]+" ");

}

System.out.println(); }

在进行遍历时,需要注意经常会出现各种异常,其中以数组下标越界(也成数组下标不合法)最为常见,这种错误在循环嵌套时最容易出现。

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值