关于Java数组的知识点

时间:2020-7-31 作者:admin


一、数组基本概念
数组就是若干个相同的数据类型的元素按一定顺序排列的集合。从数组的构成形式上分,数组可以分为一维数组和多维数组(二维及二维以上)。
二、数组的特点
(一)数组是相同数据类型元素的集合。
(二)数组中的元素是有顺序的,它们在内存是按先后顺序存放在一起的。
三、一维数组
一维数组是最简单的数组,其逻辑结构是线性表。
(一)声明
数据类型[] 变量名; 举例:int[] a; String[] b;
数据类型 变量名[];
注:这两种形式都可以,数据类型可以是基本数据类型或引用数据类型,变量名要遵循标识符的命名规则,中括号表示数组的维数,一个[]代表一维。
(二)创建数组
变量名=new 数据类型[数组的长度]; 举例:a=new int[3] (创建了一个长度为3的数组,并赋值给a)
注: 平常定义一个数组一般是连着写的, 数据类型[] 变量名=new 数据类型[数组的长度]; 这样子定义更为简便,不会容易出错。
(三)一维数组元素的访问
数组的元素是通过索引来访问的,数组的索引值范围是零至数组长度减一。数组的引用方式为:数组名[下标],下标可以是整型数或整型表达式,举例:a[0],a[i+1];对于每个数组而言,都有一个长度length,如用a.length来访问数组的长度。

package practice_java;
public class java_1{
	public static void main(String[] args) {
		int[] a=new int[5];  //创建一个长度为5的数组 
		System.out.print("数组a为:");
		for(int i=0;i<a.length;i++)
			System.out.print("a["+i+"]="+a[i]+"  ");
	}
}

运行结果为:关于Java数组的知识点
注:因为数组a的元素还没有初始化,所以元素数值默认为0。
(四)一维数组的初始化
定义数组的同时就为数组元素分配空间并赋值,这种赋值方法称为数组的初始化。
格式为:数据类型[] 变量名={元素一,元素二,元素三,…元素n};
数据类型[] 变量名=new 数据类型[]{元素一,元素二,元素三,…元素n};
另外,在声明数组的时候,不需要将数组的长度给出,编译器会根据所给的元素个数来为数组分配内存空间并设置数组的长度。
注:在声明数组的时候,都不能在中括号里面加入数组长度,例如 int[5] a; 这样的话编译器会报错。
除了以上的初始化,还有另外一种为一维数组赋值的方式,那就是利用循环的方法,也是常用的一种方法。

package practice_java;
public class java_1{
	public static void main(String[] args) {
		int[] a=new int[5];    //创建一个长度为5的数组 
		int i;
		for(i=0;i<5;i++)
			a[i]=i;
		System.out.print("数组a为:");
		for(i=0;i<a.length;i++)
			System.out.print("a["+i+"]="+a[i]+"  ");
	}
}

运行结果为:关于Java数组的知识点
四、二维数组
(一)二维数组的定义
二维数组的定义与一维数组类似。其声明与创建数组的格式为:数据类型[][] 变量名; 变量名=new 数据类型[行数][列数]; 同样地,两句语句可以连着一起定义,举例:int[][] a=new int[2][3]; (定义了一个两行三列的整型二维数组);Java语言的二维数组不一定是规则的矩形数组,它每一行的列数可以不同,所以在定义一个不规则的二维数组,只需要给出最高维数即可,格式为: 数据类型[][] 变量名=new 数据类型[行数][]; 接着再为最高维分配引用空间,也就是为每一行设置该行的数组长度,格式为:变量名[0]=new 数据类型[列数];变量名[1]=new 数据类型[列数]; 以此类推。
注:二维数组在定义的时候,必须且至少指定高层维数,例如 int[][] a=new int[2][]; int[][] a=new int[2][3]; 则编译可以通过;而
int[][] a=new int[][2]; int[][] a=new int[][]; 则编译错误。

package practice_java;
public class java_1{
	public static void main(String[] args) {
		int[][] a=new int[2][]; //创建一个行数为2的不规则二维数组
		a[0]=new int[2];    //第一行列数为2
		a[1]=new int[3];
		int i,j;
		System.out.println("数组a为:");
		for(i=0;i<a.length;i++) {
			for(j=0;j<a[i].length;j++) {
				System.out.print("a["+i+"]["+j+"]="+a[i][j]+"  ");
			}
			System.out.println();
		}
	}
}

运行结果为:关于Java数组的知识点
(二)二维数组的长度属性用法
变量名.length(访问二维数组的行数)
变量名[下标].length(访问某一行的列数)举例:a[0].length (访问第一行的列数)
(三)二维数组的初始化
与一维数组类似,要初始化二维数组也是利用花括号实现。格式为:
数据类型[][] 变量名={{第一行数组的元素},{第二行数组的元素},{第三行数组的元素}, …}

package practice_java;
public class java_1{
	public static void main(String[] args) {
		int[][] a= {{1,2,3,4},{5,6,7,8},{9,10,11,12}};  //初始化一个二维数组
		int i,j;
		System.out.println("数组a为:");
		for(i=0;i<a.length;i++) {
			for(j=0;j<a[i].length;j++) {
				System.out.print("a["+i+"]["+j+"]="+a[i][j]+"  ");
			}
			System.out.println();
		}
	}
}

运行结果为:关于Java数组的知识点
注:二维数组无论是哪一种定义方式,在声明二维数组的时候,都不可在中括号内加入指定的长度,例如
int[2][3] a=new int[2][3]; int[2][3] a={{1,2,3},{4,5,6}}; 编译都不能通过,在初始化二维数组的时候,系统会根据初始化的值来确定第一维和第二维的值。
五、foreach语句与数组
foreach语句是自JDK5所引进的一种新的for循环,它不用下标即可遍历整个数组。foreach语句只需要三个数据:数据类型,循环变量名,用于从中检索元素的数组变量名。
格式为:for(数据类型 循环变量名:数组变量名){
System.out.print(循环变量名);
}

package practice_java;
public class java_1{
	public static void main(String[] args) {
		int[] a= {1,2,3,4,5};                     / 
		System.out.print("数组a为:");
		for(int e:a) {
			System.out.print(e+"  ");
		}

运行结果为:关于Java数组的知识点

package practice_java;
public class java_1{
	public static void main(String[] args) {
		int[][] a={{1,2,3,4},{5,6,7,8},{9,10,11,12}};  //初始化一个二维数组
		System.out.println("数组a为:");
		for(int[] e:a) {
			for(int i:e)
				System.out.print(i+"  ");
			System.out.println();
		}

运行结果为:关于Java数组的知识点
五、对象数组
Java API提供了一个数组类Arrays(java.util.Arrays),它所提供的方法都是静态的。
(一)对象数组的功能方法及说明
1、public static void sort(Object[] a) 。
对指定对象数组根据其元素的自然顺序按升序排列,该方法适用于所有其它的基本数据类型(int、short等等)。

package practice_java;
import java.util.Arrays;
public class java_1{
	public static void main(String[] args) {
	    int[] a= {100,95,84,12,443,889};              
		System.out.print("数组a为:");
		for(int e:a) {
			System.out.print(e+"  "); 
		}
		System.out.println();
		Arrays.sort(a);
		System.out.print("排序后,数组a为:");
		for(int e:a) {
			System.out.print(e+"  "); 
		}
	}
}

运行结果为:关于Java数组的知识点
2、(1)public static int binarySearch(Object[] a,Object key)
用二分搜索算法在给定数组中搜索给定值的对象(int、float、double、String等等)。方法在调用之前,数组必须先排好顺序。其中参数a表示要搜索的数组,key表示要搜索的值。如果搜索值是该数组中的元素,则返回该搜索值的索引。如果搜索值不是该数组中的元素,分三种情况:若该搜索值是在该数组的元素范围之内,从1开始计数,返回“-”(负号)后面加上插入点索引;若该搜索值大于该数组的任何一个元素,则返回 -(length+1);若该搜索值小于该数组的任何一个元素,则返回 -1。

package practice_java;
import java.util.Arrays;
public class java_1{
	public static void main(String[] args) {
	    int[] a= {100,95,84,12,443,889};             
		System.out.print("数组a为:");
		for(int e:a) {
			System.out.print(e+"  "); 
		}
		System.out.println();
		Arrays.sort(a);
		System.out.print("排序后,数组a为:");
		for(int e:a) {
			System.out.print(e+"  "); 
		}
		System.out.println(); 
		int b1=Arrays.binarySearch(a, 84);
		int b2=Arrays.binarySearch(a, 200);
		int b3=Arrays.binarySearch(a, 2);
		int b4=Arrays.binarySearch(a, 1000);
		System.out.println("b1的值为:"+b1); 
		System.out.println("b2的值为:"+b2); 
		System.out.println("b3的值为:"+b3); 
		System.out.println("b4的值为:"+b4); 
	}
}

运行结果为:关于Java数组的知识点
(2)public static int binarySearch(Object[] a,int fromIndex,int toIndex,Object key)
该方法新增了两个参数,fromIndex表示指定范围的开始处开始索引(包含), toIndex表示到指定范围的结束处(不包含)。如果搜索值在指定的范围之内,则返回该搜索值的索引;如果搜索值不在指定的范围之内,则分三种情况:若搜索值大于该指定范围的任何元素,返回 -(toIndex+1);若搜索值小于该指定范围的任何元素,返回 -(fromIndex+1);若搜索值在指定的范围之内,但不是该指定范围内的元素,由1开始计数,返回“-”加上插入点索引。

package practice_java;
import java.util.Arrays;
public class java_1{
	public static void main(String[] args) {
	    int[] a= {100,95,84,12,443,889};            
		System.out.print("数组a为:");
		for(int e:a) {
			System.out.print(e+"  "); 
		}
		System.out.println();
		Arrays.sort(a);
		System.out.print("排序后,数组a为:");
		for(int e:a) {
			System.out.print(e+"  "); 
		}
		System.out.println(); 
		int b1=Arrays.binarySearch(a,1,3,84);
		int b2=Arrays.binarySearch(a,1,3,440);
		int b3=Arrays.binarySearch(a,1,3,2);
		int b4=Arrays.binarySearch(a,1,3,1000);
		System.out.println("b1的值为:"+b1); 
		System.out.println("b2的值为:"+b2); 
		System.out.println("b3的值为:"+b3); 
		System.out.println("b4的值为:"+b4); 
	}
}

运行结果为:关于Java数组的知识点
3、public static boolean equals(int[] a,int[]b)
如果数组a与数组b完全相等,则返回true,相等需满足三个条件:数组长度相等,包含相同的元素,按相同的顺序排列;若有一项条件不符合的,则返回false。这个方法也适用于其它基本数据类型。

package practice_java;
import java.util.Arrays;
public class java_1{
	public static void main(String[] args) {
		int[] a= {1,2,3};
		int[] b= {1,2,3};
		int[] c= {3,2,1};
		boolean s1=Arrays.equals(a, b);
		boolean s2=Arrays.equals(a, c);
		System.out.println("s1="+s1); 
		System.out.println("s2="+s2); 
	}
}

运行结果为:关于Java数组的知识点
4、public static void fill(int[] a,int value)
public static void fill(int[] a,int fromIndex,int toIndex,int value) (同样地,fromIndex和toIndex为数组的索引值,fromIndex包含而toIndex不包含)
将指定的int型的值分配给指定int型数组指定范围中的每个元素,这个方法也适用于其它基本数据类型。

package practice_java;
import java.util.Arrays;
public class java_1{
	public static void main(String[] args) {
		int[] a=new int[5];
		int i;
		Arrays.fill(a,10);
		System.out.print("数组a为:");
		for(i=0;i<a.length;i++)
			System.out.print(a[i]+"  ");
		System.out.println();
		System.out.print("数组a为:");
		Arrays.fill(a,2,4,8);
		for(i=0;i<a.length;i++)
			System.out.print(a[i]+"  ");
	}
}

运行结果为:关于Java数组的知识点

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。