Java语言基础语法(二)数组

来源:互联网 发布:江西财经大学软件学院 编辑:程序博客网 时间:2024/05/10 14:54

一、概念

数组的概念:数组就是具有相同属性的数据类型的一组数据的集合,就是一个装有相同数据类型的容器。

数组的好处:更有效的管理和处理数据,方便操作。

二、一维数组

一维数组实际上就是一组形同数据类型的线性集合。

声明一维数组有两种方式:

元素类型[] 数组名= new 元素类型[元素个数或数组长度];

例如:int[] arr=new int[10];//定义一个数组长度为10的数组arr。

元素类型[] 数组名= new 元素类型[]{元素,元素,……};

例如:int[] arr=new int[]{1,2,3,4,5};//定义了一个数组内容为1,2,3,4,5的数组arr。

数组在内存中的结构:

数组实体在堆内存中,都有各自的物理地址值 ,数组变量在栈内存中,实体中变量都有默认初始值。例如 Int[]a=new int[10];中a在栈内存中,int[10]在堆内存中。栈中的a存放的是数组的首地址。当不使用的时候,栈自动清空,堆靠Java虚拟机垃圾回收机制将内容清空。

三、二维数组

二维数组:如果一维数组中的每个元素仍然是一个数组,那么它就是一个二维数组。

二维数组的生命方式与一维数组的生命方式是一样的,

元素类型[][] 数组名= new 元素类型[元素个数或数组长度][元素个数或数组长度];

例如:int[][] arr=new int[2][3];//定义一个二位数组arr包括两个长度为3的一维数组。

元素类型[] 数组名= new 元素类型[]{元素,元素,……};

例如:int[][] arr=new int[][]{{1,2,3},{4,5}};//定义一个二位数组arr包括两个长度为3的一维数组,数组内容分别为1,2,3和4,5,0。这里注意的是   第二组中指定一的两个元素,一共有三个,所以另一位补0 。

二维数组的内存结果与一维数组类似。在此就不介绍了。

四、数组的基本操作

数组的基本操作有遍历数组,填充数组元素,对数组进行排序,复制数组,数组查询。

下面主要说的是数组排序算法:

1、冒泡排序

冒泡排序的基本原理:

对比相邻的元素值,如果满足条件就交换元素值,即交换元素的位置,这样数据就像气泡一样上升到顶部。

冒泡算法实现

public class ArrySort1 {public static void main(String[] args){//定义数组初始值        int[] a = new int[]{22,111,2,3,66,34,7,9,8,77};        //输出原始数组        for(int i=0;i<a.length;i++)            System.out.print(a[i]+" ");        //冒泡排序        System.out.println();        for(int i=0;i<10;i++)        for(int j=0;j<a.length-i-1;j++)        //如果前一个比后一个大,交换数据            if(a[j]>a[j+1]){                int temp = a[j];                a[j] = a[j+1];                a[j+1] = temp;            }        //输出排序后的数组        for(int i=0;i<a.length;i++)          System.out.print(a[i]+" ");}}

运行结果:

2、选择排序

选择排序的原理:

将指定排序位置与其他数组元素分别对比,如果满足条件就交换数据,但是这里交换不是交换的相邻数据,而是把满足条件的元素与指定排序位置交换,这样排序好的的位置越来越多,最后数组都成为已排序好的格式。

选择排序算法的实现

/*对于一个给定的数组进行从小到大排序操作(利用选择排序方法实现) * 思路: * 1、先用0角标上的元素依次与其他元素进行比较,将较小值元素存放到0角标。  * 2、然后再拿1角标上的元素依次进行比较,以此类推。  *  */public class ArrySort {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stub//定义数组初始值int[] arr=new int[]{22,111,2,3,66,34,7,9,8,77};//显示原始数组show(arr);//数组排序selectSort(arr);//打印排序后的数组show(arr);}private static void selectSort(int[] arr) {// TODO Auto-generated method stub//定义中间变量来存放比较的结果int temp;//外循环,遍历数组for(int i=0;i<arr.length-1;i++)//内循环,比较数组中的数据for(int j=i+1;j<arr.length;j++){if(arr[i]>arr[j]){//交换temp=arr[i];arr[i]=arr[j];arr[j]=temp;}}}//定义输出函数private static void show(int[] arr) {// TODO Auto-generated method stubSystem.out.print("[");for(int i=0;i<arr.length;i++){if(i!=(arr.length-1))System.out.print(arr[i]+",");elseSystem.out.print(arr[i]+"]");}System.out.println();}}

运行后的结果:


五、数组操作的常见问题

1、数组下标指针越界

例如:int[] a=new int[2]

System.out.println(a[2]);

数组a的角标为0,1。没有角标2的这一项。产生异常

2、数组空指针异常

例如:int[] a=new int[10];

a=null;//此时堆内存中的对象被释放了,不在指向数组,打印时就会产生空指针异常

System.out.println(a[0]);

3、int[]a=new int[10];

System.out.println(a); 

//打印的是数组地址值,结果是一个哈希值




0 0