Java基础学习(二)

数组

数组在Java语言中属于第一级对象。数组中的每个元素通过数组名加下标进行引用(访问)。当建立一个数组后,就不能轻易改变其大小。对于数组的访问不能越界访问。

1、一维数组

数组声明

类型名称 数组名[]; 或者 数据类型 [] 数组名;
int Array[]; or int[] Array;

为数组元素分配内存单元

数组名=new 类型[类型长度]
Array=new int[5];

数组初始化

在说明数组的同时进行初始化
int Array[]={2,3,4};

在声明之后再创建数组,然后为每个元素赋值

注意

Java系统能自动检查数组下标越界的情况
Java中的数组实际上是一种隐含的“数组类”
Java中任何数组都有公有变量length。

2、二维数组

数组声明

数组类型 数组名 [][];或者 数组类型[] 数组名 [];
int Array[][];
int[] Array[];

为元素分配内存空间

直接为每一维分配空间:int a[][]=new int[3][3];

从最高维开始,分别为每一维分配空间
int a[][]=new int[3][];
a[0]=new int [3];
a[1]=new int [5];
a[2]=new int [2];

数组是第一级对象

数组可以分为对象数组和基本类型数组,对象数组保存的是对象的引用,而基本类型数组直接保存基本类型的数值。

新生成一个对象数组时,其中所有的引用被自动初始化为null;所以在程序中检查其中的引用是否为null即可知道数组的某个位置是否存在对象;同样基本类型的数组如果是数值型的,就被自动初始化为0,如果是字符型(char)的,就被自动初始化为(char)O;如果是布尔型(boolean),就被自动初始化为false。

在Java中,你写的方法可以返回一个数组,而无需担心要为数组负责——只要你需要它,它就会一直存在,当你使用完后,垃圾回收器会清理掉它。

Array.deepToString()

Java SE5中的Array.deepToString()方法,可以将多维数组转换为多个String。
import java.util.*;
public class TestForJava {
    public static void main(String[] atgs){
        int [][]array=new int[4][];
        for(int i=0;i<array.length;i++){
            array[i]=new int[5];
        }
        System.out.println(Arrays.deepToString(array));
    }

}
运行结果
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

Arrays实用功能

java.util类库中的Arrays类,有一套用于数组的static实用方法,其中有6个基本方法:
  • equals():用于比较两个数组是否相等(deepEquals()用于多维数组)。
//数组相等的条件是元素个数必须相等,并且对等位置上的元素也要相同
//可以通过对每一个元素使用equals()作比较来判断。
//对于基本类型,需要使用基本类型的包装器类的equals()方法。
import java.util.*;
public class TestForJava {
    public static void main(String[] atgs){
        int []i=new int[7];
        int []j=new int[7];
        int []k=new int[8];
        Arrays.fill(i, 22);
        Arrays.fill(j, 33);
        Arrays.fill(k, 22);
        System.out.println("i="+Arrays.toString(i));
        System.out.println("j="+Arrays.toString(j));
        System.out.println("i  j:"+Arrays.equals(i, j));

        Arrays.fill(j, 22);
        System.out.println("i="+Arrays.toString(i));
        System.out.println("j="+Arrays.toString(j));
        System.out.println("i  j:"+Arrays.equals(i, j));

        System.out.println("i="+Arrays.toString(i));
        System.out.println("k="+Arrays.toString(k));
        System.out.println("i  k:"+Arrays.equals(i, k));
    }
}
运行结果:
i=[22, 22, 22, 22, 22, 22, 22]
j=[33, 33, 33, 33, 33, 33, 33]
i  j:false
i=[22, 22, 22, 22, 22, 22, 22]
j=[22, 22, 22, 22, 22, 22, 22]
i  j:true
i=[22, 22, 22, 22, 22, 22, 22]
k=[22, 22, 22, 22, 22, 22, 22, 22]
i  k:false
  • fill():用来以同一个值来填充数组,或者填充数组的某个区域,针对对象而言就是复制同一个引用来填充。
  • sort():用于对数组的排序。

  • binarySearch():用于在已经排序的数组中查找元素。

  • toString():产生数组的String表示。

  • hashCode():产生数组的散列码

    这些方法对各种基本数据类型和Object类而重载过

  • 另外Java标准类库提供的static方法System.arraycopy(),用它复制数组比用for循环复制要快很多,System.arraycopy()针对所有的类型都做过重载。

    arraycopy()需要的参数有:源数组,表示从源数组中的什么位置开始复制的偏移量,表示从目标数组的什么位置开始复制的偏移量,以及需要复制的元素个数。

    需要注意的是基本数据类型和对象数组都可以复制,但是在复制对象数组的时候,只是复制了对象的引用——而不是对象本身的拷贝,也就是浅复制。
    System.arraycopy()不会执行自动包装和自动拆包,两个数组必须具有相同的确切类型。

    //System.arraycopy()使用示例
    import java.util.*;
    public class TestForJava {
    public static void main(String[] atgs){
        int []i=new int[7];
        int []j=new int[10];
    
        Arrays.fill(i, 22);
        Arrays.fill(j, 33);
    
        System.out.println("i="+Arrays.toString(i));
        System.out.println("j="+Arrays.toString(j));
    
        System.arraycopy(i, 0, j, 0, i.length);
        System.out.println("j="+Arrays.toString(j));    
    }
    }
    运行结果:
    i=[22, 22, 22, 22, 22, 22, 22]
    j=[33, 33, 33, 33, 33, 33, 33, 33, 33, 33]
    j=[22, 22, 22, 22, 22, 22, 22, 33, 33, 33]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农李某

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值