欢迎来到星辰寺小和尚的博客

生为冰山,就该淡淡地爱海流、爱风,并且在偶然接触时,全心全意地爱另一块冰山。
扩大
缩小

Java中的数组

  数组是由同一类型的对象或者基本数据类型组成,并封装在同一个标识符(数组名称)下的一种数据结构。在Java中,数组是一种引用数据类型,可以看做对象,需要进行初始化,也可以直接赋值给Object对象,调用Object中的所有方法。每个数组中都有一个由public final修饰的成员变量--length,即数组中含有元素的个数,该变量的值必须为0或正整数。

  数组的创建总共有数组的声明、数组的构建、数组的初始化三步,最后才能使用数组。

一.声明数组的引用

  声明数组时可以不指明数组元素的个数,也可以不为数组元素分配内存空间,只要指定数组元素的数据类型和数组名即可,此时是一个空引用。如:

//数组声明有两种形式
//第一种:Type[] arrayName;
int[] intArray;
String[] stringArray

//第二种:Type arrayName[];
int intArray[];
String stringArray[];

  

二.数组的创建

  用关键字new构成数组的创建表达式,表示在创建时动态分配内存空间。此时可以指定数组类型和数组元素的个数,元素个数既可以是常量也可以是变量。基本类型数组的每个元素都是一个基本类型的变量,引用类型数组的每个元素都是元素的引用。如:

//数组创建的基本格式位:arrayName = new Type[componets number];

int[] ai;
ai = new int[10];

String[] s;
s= new String[3]

//可以将数组的声明与创建一并执行
int ai[] = new int[10];

//同时创建多个数组
String[] s1 = new String[3], s2 = new String[8];

  若不初始化数组,数值型数组会自动初始化为0,字符型数组会自动初始化为null,布尔型数组会初始化为false,引用型数组会自动初始化为空引用null。

三.数组元素的初始化

  声明数组名时,给出了数组的初始值,程序变回利用数组初始值创建数组并对它的各个元素进行初始化,如:

int a[] = {22,33,44,55};

  若创建数组时没有指定初始值,数组便会被赋予默认的初始值。

 

四.数组的使用

  数组的引用可以通过数组名加下标来对数组的元素进行访问,即arrayName[index]。其中数组下标必须为byte,int,short或者char,从0开始计数,下标值的最大值为length-1,如果超过最大值,将会产生数组越界异常。

  数组名是一个引用:

 

public class Arrays{

	public static void main(String[] args){
		int[] a1 = {1,2,3,4,5};
		int[] a2;
		a2 = a1;
		for(int i = 0;i < a2.length; i++){
			a2[i]++;
		}
		
		for(int i=0;i < a1.length; i++){
			System.out.println("a1[" + i + "]" + a1[i]);
		}
	}
}
//数组a1和数组a2指向同一个引用,当数组a2中的元素加1时,数组a1中的元素便也加1了。
//输出结果
a1[0] = 2
a1[1] = 3
a1[2] = 4
a1[3] = 5
a1[4] = 6

 

  对于字符串构成的数组,每个字符串都是一个引用。如:

public class ArrayOfStringsDemo{
	public static void main(String[] args){
		String[] anArray={"String One","String Two","String Three"};
		for(int i = 0;i < anArray.length; i++){
			System.out.println(anArray[i].toLowerCase());
		}
	}
}

//运行结果
string one
string two
string three

 

五.复制数组或数组的部分元素

  复制数组用的方法是arraycopy,其格式为

public static void arraycopy(Object source, int srcIndex, Object dest,int destIndex,int length)

  例;

public class ArrayCopyDemo{

	public static void main(String[] args){
		char[] copyFrom = {'d','e','c','a','f',
				'f','e','i','n','a','t','e','d'};
		char[] copyTo = new char[7];
		System.arraycopy(copyFrom,2,copyTo,0,7);
		System.out.println(new String(copyTo));
	}
}

//输出结果
caffina

 

六.数组的常用方法

  数组中的所有方法基本都是封装在java.util.Arrays包中,其中比较常用方法为:

  • static String toString(type[] a):返回包含a中数据元素的字符串,这些数据元素被放在括号内,用逗号分割。

    type:int,long,short,char,byte,boolean,float或double

  • static type copyOf(type[] a,int length)
  • static type copyOfRange(type[] a,int start, int end)

    返回与a类型相同的一个数组,其长度为length或者end - start,数组元素为a的值。

      type:int,long,short,char,byte,boolean,float或double

      start:起始下标,包含这个值

      end:终止下标,不包含这个值。

      length:拷贝的数组元素长度,取值范围为0~源数组的大小。

  • static void sort(type[] a)

    采用优化的快速排序方法对数组进行排序。

  • static int binarySearch(type[] a,type v)
  • static int binarySearch(type[] a,int start,int end,type v)

    采用二分搜索法来查找值v,如果查找成功,则返回对应的下标值,否则返回一个负数值r。-r-1是为保持a有序v应该插入的位置。其中v的数据类型必须和a中的数据类型一致。

  • static void fill(type[] a,type v)

    将所有数据元素值都设置为v。

  • static boolean equals(type[] a,type[] b)

    如果两个数组大小、下标相同的数组元素也相同,则返回true。

 

七.多维数组的创建与使用

  二维数组是数组的数组,其创建方法与一维数组原理相同。如:

//方法一:只声明不初始化
int[][] gradeTable;//gradeTable 是一个指向2维整数数组的引用,其初始值为null
//方法二:声明并初始化
int[][] myArray = new int[3][5];//定义引用时,同时构造数组并初始化引用,初始值为0,设置二维数组大小时,前者必须是不为空的正整数
//方法三:定义引用、构造数组,初始化数组元素
int[][] myArray = {{8,1,2,2,9},{1,9,4,0,3},{0,3,0,0,7}};

  二维数组的长度及每行的长度

class UnevenExample3{
	public static void main(String[] args){
	//声明构造一个二维数组
	int[][] uneven = {{1,9,4},{0,2},{0,1,2,3,4}};
	
	//数组的长度(行数)
	System.out.println("Length of array is :" + uneven.length);
	
	//数组每一行的长度(列数)
	System.out.println("Length of row[0] is :" + uneven[0].length);
	System.out.println("Length of row[1] is :" + uneven[1].length);
	System.out.println("Length of row[2] is :" + uneven[2].length);
	}
}

//运行结果
Length of array is  : 3
Length of row[0] is : 3
Length of row[1] is : 2
Length of row[2] is : 5

 

  

 

posted on 2020-01-25 20:30  星辰寺的小和尚  阅读(477)  评论(0)    收藏  举报

导航