首页 > 编程 > Java > 正文

Java基础学习(二)

2019-11-06 07:07:38
字体:
来源:转载
供稿:网友

数组

数组在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:falsei=[22, 22, 22, 22, 22, 22, 22]j=[22, 22, 22, 22, 22, 22, 22]i j:truei=[22, 22, 22, 22, 22, 22, 22]k=[22, 22, 22, 22, 22, 22, 22, 22]i k:falsefill():用来以同一个值来填充数组,或者填充数组的某个区域,针对对象而言就是复制同一个引用来填充。

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]
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表