关于Java数组的知识点

一、数组基本概念
数组就是若干个相同的数据类型的元素按一定顺序排列的集合。从数组的构成形式上分,数组可以分为一维数组和多维数组(二维及二维以上)。
二、数组的特点
(一)数组是相同数据类型元素的集合。
(二)数组中的元素是有顺序的,它们在内存是按先后顺序存放在一起的。
三、一维数组
一维数组是最简单的数组,其逻辑结构是线性表。
(一)声明
数据类型[] 变量名; 举例: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]+"  ");
	}
}

运行结果为:在这里插入图片描述
注:因为数组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]+"  ");
	}
}

运行结果为:在这里插入图片描述
四、二维数组
(一)二维数组的定义
二维数组的定义与一维数组类似。其声明与创建数组的格式为:数据类型[][] 变量名; 变量名=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();
		}
	}
}

运行结果为:在这里插入图片描述
(二)二维数组的长度属性用法
变量名.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();
		}
	}
}

运行结果为:在这里插入图片描述
注:二维数组无论是哪一种定义方式,在声明二维数组的时候,都不可在中括号内加入指定的长度,例如
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+"  ");
		}

运行结果为:在这里插入图片描述

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 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+"  "); 
		}
	}
}

运行结果为:在这里插入图片描述
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); 
	}
}

运行结果为:在这里插入图片描述
(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); 
	}
}

运行结果为:在这里插入图片描述
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); 
	}
}

运行结果为:在这里插入图片描述
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语言基础篇

03-28
课程介绍: 这是一门Java语言入门课程,针对的是Java初学者或者从事其他计算机语言开发但希望转到Java开发工作上来的软件工程师,是所有想入java之门的朋友首先要学的第一门课,也是整个Java开发的核心和基础,也就是大家常说的JAVA SE版本中涵盖的知识; 本门课程将采用 windows平台下的intellij IDEA开发环境作为主要的讲解平台,对于熟悉其他Java开发环境的学友们,当然也可以选择自己熟悉的平台;本门课程希望达到的目标是给大家打语言基础,但不希望一上来给大家太重的学习负担,分阶段,逐步的学习,是更好的学习方式,所以在本门课程中,我们将只涉及到基础的语言,以及面向对象程序设计的一些基础概念,更多的知识和概念我们将放在进阶课程中讲解,这一点望大家知晓; 在Java诞生的不到30年时间里,Java开发人员的市场需求已经增长到了一个非常惊人的程度,至少目前来看,没有任何一门开发技术能够和java比,从待遇方面,高级Java开发人员的薪资也是相当的高,大概只有c++能够和Java掰一掰手腕,其他的开发技术的薪资待遇,很难与Java比较。 很多想学习java的同学,会有一种困惑,感觉Java知识特别零散,除基本的Java语言外,各种概念、各种框架层出不穷,那我们怎么入学习之门,学到什么程度,能找到什么样的工作,这些问题就会困扰着我们;针对这种情况,我将不断推出一系列的Java课程,通过这一系列的课程,为大家搭建一条比较完整的Java学习链条,我并不准备回答大家“学到什么程度,能找到什么样的工作这种问题“,因为当你学到一定的程度之后,你自然就会找到答案,但有一点可以确定:仅仅学习完本门课程还不够,还需要继续深入学习下去! 讲解中所安装的是jdk版本是jdk 12版本,但这并不意味着我们要把这个版本中的所有知识讲解的面面俱到,把最有用、最实用,最能帮助大家加薪的知识挑选出来讲解是老师的重要责任; 讲师介绍: 王健伟老师,网名:狂想(KuangXiang),1995年毕业于哈尔滨工程大学计算机及应用专业,20多年软件开发经验,经历过数十个软件项目开发包括网络通信、网络安全、网络游戏等领域,多年的摸爬滚打使自身具备了极其深厚的开发实力和实战经验。 深圳知名网络安全公司安络科技(www.cnns.net)有限公司创始人之一、中国首套网络安全在线扫描评估系统项目负责人,电子工业出版社2003年《Crystal Reports水晶报表设计与开发实务》书籍作者,全球同服独立游戏《冒险之路》制作人。 在教学上,老师自带讲课天赋,善于用最清晰、最通俗的语言把复杂问题简单化,让你听了就能懂,当节学完基本就能掌握,老师能够为你节省大量的学习时间并能达到极好的教学效果!
©️2020 CSDN 皮肤主题: 1024 设计师: 上身试试 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值