Java基础之数组

  鄙人才疏学浅,初识Java,抱着一颗无畏而炽热的心踏上Java不归路,希望与志同道合之人一起分享心得与经验,提高自己,挑战自己,共同进步。路漫漫其修远兮,吾将上下而求索!废话少说,上重点,下面和大家聊聊我对数组的理解和总结。

一 、数组是什么

  在Java中,只有8中基本数据类型,即boolean、char、byte、short、int、long、float、double。很显然,数组不属于基本数据类型。其实,在Java中,数组是以对象的形式存在的(Java数组继承自Object类),既然我们知道数组是对象了,那么它有哪些特点呢?

  1. 数组是长度固定的数据结构,存储的元素必须具有相同的数据类型。
  2. 数组的下标从0开始,即第0位表示数组的第一个元素,数组的length属性表示数组的长度。
  3. 在编译时,编译器不会自动检查索引是否越界,但在运行期间会抛出异常,即ArrayIndexOutOfBoundsException,这是数组中最容易出现的异常,必须牢记。

二 、定义数组

方式1(推荐使用)

  type[] array = new type[元素个数];
  如:int[] array = new int[10];
    array[0] = 1;
    ......;

方式2

  type array[] = new type[元素个数];
  如:int array[] = new int[10];
    array[0] = 1;
    ......;

方式3(直接初始化)

  type[] array = new type[]{元素值,中间用逗号隔开};
  其中new type[]也可以省略
  如:int[] array = new int[]{1,2,3,4,5,6};
    int[] array = {1,2,3,4,5,6};


三 、数组的属性及操作方法

1. length属性:

在数组中定义了一个length属性,即 public static final int length ,表示数组的长度,在数组定义完后,该数组的length值就不会改变。

2. 数组的拷贝方法
  • 在Java编程中,System类中提供了一种特殊的方法拷贝数组,即public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length);
    参数:src - 源数组。
       srcPos - 源数组中的起始位置。
       dest - 目标数组。
       destPos - 目标数据中的起始位置。
       length - 要复制的数组元素的数量。
    以下为实现该方法的代码:
 public class Test {
    public void testArrayCopy(int[] oldArray){
        //获取数组的长度
        int length = oldArray.length;
        //遍历oldArray数组:增强型for循环
        System.out.print("oldArray:");
        for(int i : oldArray){
            System.out.print(i+" ");
        }
        //换行
        System.out.println();
        //创建新的数组newArray
        int[] newArray = new int[length];
        //将oldArray的内容复制到newArray中
        System.arraycopy(oldArray, 0, newArray, 0, length);
        //遍历newArray数组:使用索引进行遍历
        System.out.print("newArray:");
        for (int i = 0; i < length; i++) {
            System.out.print(newArray[i]+" ");
        }

    }

  运行结果如下:

  oldArray:1 2 3 4 5 6 7 8 9   
  newArray:1 2 3 4 5 6 7 8 9 
  • 数组的拷贝有另外一种方法,在Object类中提供了另外一种方法,clone(),因为所有对象都是Object的子类,所有数组继承了该方法。
    以下为实现该方法的代码  
public class TestClone {
    public static void main(String[] args) {
        int[] oldArray = {1,3,5,7,9};
        int[] newArray = oldArray.clone();
        System.out.print("oldArray:");
        for(int i : oldArray){
            System.out.print(i+" ");
        }
        System.out.println();
        System.out.print("newArray:");
        for(int i : newArray){
            System.out.print(i+" ");
        }
    }
}

运行结果如下:

oldArray:1 3 5 7 9   
newArray:1 3 5 7 9  
3. 数组的比较

在Java中,”==”是用来比较两个对象的引用是否相同,而不是比较对象的内容是否相等。在Object类中,有equals()方法,其实Object中的equals()方法和”==”是相同的,数组却没有重写equals()方法,所以数组用equals()和”==”进行对象的比较会得到相同的结果。但是,有没有比较数组内容是否相同的方法?答案是肯定的。Java工具包提供了一个数组类(下面会详细介绍),Arrays类重写了equals()方法,用于进行数组内容的比较。另外自己也可以编写代码实现数组内容的比较,比较简单,代码在这里就不写了。
实现代码如下:

import java.util.Arrays;

public class TestEquals {
    public static void main(String[] args) {
        int[] a = {2,4,6,8};
        int[] b = {2,4,6,8};
        System.out.println("a==b : "+(a==b));
        System.out.println("a.equals(b) : "+a.equals(b));
        System.out.println("Arrays.equals(a, b) : "+Arrays.equals(a, b));
    }
}  

运行结果如下:

a==b : false  
a.equals(b) : false  
Arrays.equals(a, b) : true  

四 、 二维数组的介绍

简单来说,二维数组就是在一维数组里面再嵌套一个数组。而为数组的定义和初始化极为相似,下面列举一种创建方式。

  type[][] array = new type[行][列];
  
下面用代码实现一下二维数组的打印,代码如下:

 public class Two_Array {
    public static void main(String[] args) {
        //静态初始化方式创建二维数组,数组每行的个数也不必要求必须相等。
        int[][] array = {{1,2,3,4},{5,6,7},{8,9}};
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j]+" ");
            }
            System.out.println();
        }
    }
}  

运行结果如下:

   1 2 3 4   
   5 6 7   
   8 9   

五 、数组类–Arrays

该类在”java.util”包中,它提供一些方法,这些方法全部为static方法,可以通过Arrays类直接调用,并且对这些方法进行了重载(方法名相同,参数不同)。常用方法如下:(参数没写,详情看API文档)

equals() 比较数组内容是否相同,上面已介绍。
sort() 对该数组按数字进行升序排序
toString() 将数组以字符串的形式返回
binarySearch() 使用二分搜索法来搜索指定的type型数组,以获得指定的 值。(使用该方法之前,必须先对该数组从小到大进行排序)
fill()  将指定的type值分配给指定type型数组的每个元素。
copyOf() 复制指定的数组,截取或用默认值填充(如有必要),以使副本具有指定的长度。
copyOfRange() 将指定数组的指定范围复制到一个新数组。  

上述一些方法的具体实现如下:

import java.util.Arrays;

public class TestArrays {
    public static void main(String[] args) {
        int[] array = {3,1,6,9,8,5,2,7,4};
        //打印原数组:
        System.out.print("原数组为:");
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]+" ");
        }
        //调用sort()方法对数组进行排序
        Arrays.sort(array);
        System.out.print("\n"+"排序后:    ");
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]+" ");
        }
        System.out.print("\n"+"将数组转换为字符串: ");
        String str = Arrays.toString(array);
        System.out.print(str);
        //fill()方法
        System.out.print("\n"+"将数组的第二位到第六位填充为0,填充后的数组为:");
        //第一个参数为数组,第二个参数为起始位置,第三个参数为结束位置(不包括),第四个参数为填充的值
        Arrays.fill(array,1,6,0);
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]+" ");
        }
        //copyOf()方法,第一个参数为原数组,第二个参数为截取的长度。如果超过原数组长度,则用默认值代替,如下:
        int[] newArray = Arrays.copyOf(array, 13);
        System.out.print("\n"+"copyOf()方法:");
        for (int i = 0; i < newArray.length; i++) {
            System.out.print(newArray[i]+" ");
        }
        //copyOfrange(),第一个参数为原数组,第二个参数为起始位置,第三个参数为结束位置(不包括),例子如下:
        System.out.print("\n"+"copyOfRange()方法:");
        int[] newArray2 = Arrays.copyOfRange(array, 0, 8);
        for (int i = 0; i < newArray2.length; i++) {
            System.out.print(newArray2[i]+" ");
        }
    }
}  

运行结果如下:

原数组为:3 1 6 9 8 5 2 7 4   
排序后:    1 2 3 4 5 6 7 8 9   
将数组转换为字符串: [1, 2, 3, 4, 5, 6, 7, 8, 9]  
将数组的第二位到第六位填充为0,填充后的数组为:1 0 0 0 0 0 7 8 9   
copyOf()方法:1 0 0 0 0 0 7 8 9 0 0 0 0   
copyOfRange()方法:1 0 0 0 0 0 7 8   

六 、总结

经过一上午的奋斗,我的第一篇博客终于诞生啦,虽然有很多瑕疵,但是心情还是很激动的,毕竟人生的第一次就这样没有了,哈哈。写博客,是很严谨的一件事,要查阅相关资料,立足确保知识的正确性,在写博客的过程中,也收获了很多,查漏补缺,希望自己再接再厉,加油!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值