数组是具备相同数据类型的一组数据的集合,做为对象容许使用new关键字进行内存分配。首先先来熟悉一下一维数组的建立和使用。java
声明一维数组,有下列两种方式:算法
数组元素类型 数组名字[];数组
数组元素类型[] 数组名字;学习
数组元素类型据定了数组的数据类型,它能够是java中任意的数据类型,声明一维数组,如:int arr[]; String str[]; int arr[]是声明int型数组,数组中的每一个元素都是int型数值,同理,str[]数组中的每一个元素都是String类型。this
注:Java语言中声明数组时不能指定其长度(数组中元素的个数),这是由于数组是一种引用类型的变量,所以使用它定义一个变量时,仅仅表示定义了一个引用变量(也就是定一个了一个指针),这个引用变量还未指向任何有效的内存,因此定义数组时不能指定数组的长度。并且因为定义数组仅仅只是定一个引用变量,并未指向任何有效的内存空间,因此尚未内存空间来存储数组元素,所以这个数组也不能使用,只有在数组进行初始化后才能够使用。spa
为数组分配内存空间的语法格式以下:指针
数组名字=new 数组元素的类型[数组元素的个数];例如,arr=new int[5];也能够在声明数组的同时为数组分配内存,例如:int arr[]=new int[5];code
附:一旦使用new关键字为数组分配了内存空间,每一个内存空间存储的内容就是数组元素的值,也就是数组元素就有了初始值,即便这个内存空间存储的内容是空,这个空也是一个值null。也就是说不可能只分配内容空间而不赋初始值,即便本身在建立数组对象(分配内容空间)时没有指定初始值,系统也会自动为其分配。对象
附:诸如基础数据类型的包装类,其默认的初始化值均为null,由于基础数据类型的包装类建立的数组属于引用数组(对象数组),对象数组默认的初始化值都是null。排序
理解了一维数组的声明和建立,二维数组的声明和建立大同小异。二维数组的声明,int arr[][];二维数组经常使用于表示表,第一个下标表示行,第二个下标表示列。直接为二维数组分配内存,方法以下:a=new int[2][4];
为数组分配内存以后,就要学习如何初始化数组了。一维数组的初始化形式有两种:
int arr[]=new int[]{1,2,3,4}; 或 int arr[]={1,2,3,4};
二维数组的初试化方法: int myarr[][]={{12,2},{43,45}}; 注意,写成intmyarr[][]={12,2,43,45}是错误的。
接下来,经过两段小的代码来解释如何使用一维数组和二维数组。
第一个例子是使用一维数组将1~12月各月的天数输出。代码以下:
public class shuZu{
public static void main(String[] args){
int day[]=new int[]{31,28,31,30,31,30,31,31,30,31,30,31};
for (int i=0;i<12;i++){
System.out.println((i+1)+"月有"+ day[i]+"天");
}
}
}
第二个例子是使用二维数组将数组中的元素输出。代码以下:
public class shuZu{
public static void main(String args[]){
int arr[][]=new int[][]{{1},{2,3},{4,5,6}};
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
System.out.print(arr[i][j]);
}
System.out.println();
}
}
}
简单介绍了一下数组的基本内容,接下来说解一下经典的数组冒泡排序算法。
冒泡排序原理:相邻的两位数作比较,1和2比较 2和3比较 3和4比较 4和5比较,这样依次比较,若是前面的数小于后面的,不作操做,若是前面的数大于后面的数则调换两个数字的位置,列1>2 则数字顺序为2 1(注:此时的1 2 3 4 5表明索引而不是数组),因此一层循环能挑出一个当前数组参与比较数字中的最大的数字,并将其排到数组的最末尾。
可是一层循环根本不够用,只能挑选出一个最大数,数组中其余的数字尚未正确排序。
这里遵循一个原理就是数组里面有length个数字,要进行length-1次循环。至于为何要this.length-i,是由于第一次比较7个数字,第二个只要比较前6个就好了,第7个确定是最大的了。这里要着重强调为何会有2个for循环,为何要用this.length-i。
下面用一个列子来作详细的说明:
var array = [8,7,9,2,3,5,6,1];
var temp = 0;
function sort(arr){
for (var i = 0; i < arr.length; i++){//这里的i控制循环比较的次数
for (var j = 0; j < arr.length - i; j++){
//这里的j控制参与比较的数字个数,由于每比较一次都会产生一个最大的数字,那么下次比较的时候就不必参与比较了,因此每比较一次都会减小一个数字
if (arr[j] > arr[j + 1]){
temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
}
console.log('before: ' + array);//输出[8,7,9,2,3,5,6,1]
sort(array);
console.log(' after: ' + array);//输出[1,2,3,5,6,7,8,9]