第四章 数组总结

目录

4.1数组的概述

4.2.1 创建一维数组 

例4.1

初始化一维数组

4.2.2 初始化一维数组

 4.2.3 获取数组长度  

 4.2.4  使用一维数组 

4.3  二维数组 

 例4.3 分别用三种方法初始化二维数组

4.3.1  创建二维数组 

4.3.2  初始化二维数组 

4.3.3  使用二维数组 

4.4  数组的基本操作

4.4.1  遍历数组

例4.7填充和批量 替换数组元素

4.4.2  填充和批量替换数组元素

 4.4.3  复制数组 

4.5  数组的排序

4.5.1  算法:冒泡排序 

计算过程

4.5.2  算法:选择排序

4.5.3  Arrays.Sort ()方法


4.1数组的概述

数组是具有相同数据类型的一组数据的集合。

4.2.1 创建一维数组 

例4.1

初始化一维数组

代码

结果

4.2.2 初始化一维数组

数组可以与基本数据类型一样进行初始化操作, 也就是赋初值。数组的初始化可分别初始化数组中的每个元素。

 4.2.3 获取数组长度  

arr:数组名

length:数组长度类型,返回int值。

 4.2.4  使用一维数组 

例4.2  

代码

结果 

 

4.3  二维数组 

 例4.3 分别用三种方法初始化二维数组

 初始二维化数组:

int[][] a = new  int[4][5]{{1,2,3,4,5},{],{},{}};

int[][] a ;

a = {{1,2,3,4,5},{},{},{}};

int[][] a = new  int[4][5]

a[0] = new int []{1,2,3,4,5};

代码

结果 

4.3.1  创建二维数组 

例4.4

代码


	
	public static void main(String[] args) {//主函数
		// TODO Auto-generated method stub
	  char arr[][] = new char[4][]; // 创建一个4行的二维数组
	    arr[0] = new char[] { '春','眠','不','觉','晓'}; // 为每一行赋值 
	    arr[1] =new char[] { '处','处','闻','啼','鸟'}; //输出第二行
	    arr[2] = new char[] { '夜','来','风','语','声'}; //输出第三行
	    arr[3] = new char[] { '花','落','知','多','少' };输出第四行
	    /*横版输出*/
	    System.out.println("---横版---");//换行
	    for (int i = 0; i < 4; i++) {// 循环4行
	     for( int j=0;j < 5;j++){//循环5列
	    System.out.print(arr[i][j]);//输出数组中的素
	   }
	    if (i % 2 == 0) {//判断语句
	     System.out.println(",");//如果是一、三句,输出号
	     }else {
	      System.out.println("。");//如果是二、四句,输出句号
	   }
	    }
	    /*竖版输出*/
	    System.out.println("\n-----竖版-----"); //换行
	    for (int j = 0; j < 5; j++) {// 列变行
	     for (int i = 3; i >=0; i--) {// 行变列,反序输出
	      System.out.print(arr[i][j]);//输出数组中的元素
	   }
	     System.out.println();//换行
	    }
	    System.out.println("。,。,");//输出最后的标点
	 }
	
	}

结果

4.3.2  初始化二维数组 

 例4.5

创建一个不规则二维数组

4.3.3  使用二维数组 

代码

结果 

 例4.6

定义二维数组 

比如快捷酒店,每-个楼层都有很多房问,这些房问都可以构成维数组, 如果这个酒店有500个房间,并且所有房间都在同一个楼层里,那么拿到499号房钥匙的旅客可能就不高兴了,从1号房走到499号房要花好长时间,因此每个酒店都不只有一个楼层, 而是很多楼层,每一个楼层 都会有很多房间,形成一个立体的结构, 把大量的房间均摊了下来,这种结构就是二维表结构, 如图4.7所示,在计算机中,这种二维表结构可以使用二维数组来表示。如图4.7所示,每一个楼层都是一个一维数组,楼层数本身又构成了一个数组,这样一家酒店 就构成了一个二维数组。
 

4.4  数组的基本操作

4.4.1  遍历数组

遍历数组就是获取数组中的每个元素。通常遍历数组都是使用for 循环来实现的。遍历维数组很简单,也很好理解,下面详细介绍遍历二维 数组的方法。
遍历二维数组需使用双层for循环,通过数组的length属性可获得数组的长度。

代码

 

结果

例4.7填充和批量 替换数组元素


。。。。。。。。。
}遍历数组
for(int i =0;<数组名。length;i++){
    数据类型   a  =  数组名[i];
for(数据类型:a[i])    {     //foreach循环输出数组中的元素
。。。。。。。。。。。。。
}

代码

 结果 

4.4.2  填充和批量替换数组元素


数组中的元素定义完成后,可通过Arrays类的静态方法fll0来对数组中的元素进行分配,可以起到填充和替换的效果。fll()方法有两种参数类型,下面以int型数组为例介绍fill()方法的使用。

1.fill(int[] a,int,value)

方法可将指定的int值分配给int型数组的每个元素

a: 要进行元素分配的数组

value:要存储数组中所以元素的值

2.计算过程
冒泡算法由双层循环实现,其中外层循环用于控制排序轮数,般是 要排序的数组长度减1次,因力最后一次循环只剩下-一个数组元素,不需要对比,同时数组已经完成排序了。而内层循平主要用于对比数细中每个临近元素的大小,以确定见否交换位置,对比和交换次数以排序轮数而碗少。

第一轮外层循环时把最大的元素值63移动到了最后面(相应的比63小的元素向前移动,类似气泡上升),第二轮外层循环不再对比最后个元素值63,因为它已经确认为最大 (不需要上升),应该放在最后,需要对比和移动的是其他剩余元素,这次将元素24移动到了63的前一一个位置。其他循环将依此类推,继续完成排序任务。

替换数组

 例4.8

代码

结果

 4.4.3  复制数组 

 例4.9

创建一维数组,将此数组复制得到一个长度为5的新数组

复制数组
数据类型[]新数组名 = Arrays.copy0f(旧数组名,新数组长度);

复制数组  前含后不含

代码

 

 结果

 例4.10

创建一维数组,并将数组中索引位置是0~3之间的元素复制到新数组中,最后将数组输出

代码

结果 

4.5  数组的排序

4.5.1  算法:冒泡排序 

冒泡排序
    冒泡排序是最常用的数组排序算法之一,它以简洁的思想与实现方法备受青睐。是初学者最先接触的一个排序算法。使用冒泡排序时,排序数组元素的过程总是小数往前放,大数往后放,类似水中气泡往上升的动作,所以称作冒泡排序。

例4.11代码

		/**
	  * 冒泡排序方法
	  * 
	  * @param array
	  *    要排序的数组
	  */
	 public void sort(int[] array) { //主函数
	  for (int i = 1; i < array.length; i++) { //比较相邻两个元素,较大的数往后冒泡
	   for (int j = 0; j < array.length - i; j++){//元素长度
	    if(array[j] > array[j + 1]) {//如果前一个元素比后一个元素大,则两元素互换
	     int temp = array[j]; // 把第一个元素值保存到临时变量中
	     array[j] = array[j+1];//把第二个元素值保存到第一个元素单元中 
	     array[j + 1] =temp; // 把临时变量(也就是第一个元素原值)保存到第二个元素中
	    }
	   }
	  }
	  showArray(array);//输出冒泡排序后的数组元素
	 }
	 /**
	  * 显示数组中的所有元素
	  * 
	  * @param array
	  *    要显示的数组
	  */
	 public void showArray(int[] array) {//主函数
	  System.out.println("冒泡排序的结果:"); //输入输出结果
	  for (int i :array) { // 遍历数组
	   System.out.print(i + " ");//输出每个数组元素值
	  }
	  System.out.println();//输出
	 }
	 public static void main(String[] args) {//创建一个数组,这个数组元素是乱序的
	 int[] array={63, 4, 24, 1, 3, 15 };//创建排序类的对象
	 TTT11 sorter=new TTT11();//存放代码的文件名
	 sorter.sort(array);//调用排序方法数组排序 
	 }
}

结果

例4.12

排列数组

直接选择排序的基本思想是将指定排序位置与其他数组元素分别对比,如果满足条件就交换值,注意这里区别冒泡排序,不是交换相邻元素,而是把满足条件的元素与指定的排序位置交换(如从最后一个元素开始排序),这样排序好的位置逐渐扩大,最后整个数组都成为已排序好的格式。

计算过程

   冒泡算法由双层循环实现,其中外层循环用于控制排序轮数,般是 要排序的数组长度减1次,因力最后一次循环只剩下-一个数组元素,不需要对比,同时数组已经完成排序了。而内层循平主要用于对比数细中每个临近元素的大小,以确定见否交换位置,对比和交换次数以排序轮数而碗少。

代码

 /**
	    * 直接选择排序法
	    *  @param array 
	    *    要排序的数组
	    */
	   public void sort(int[] array) {//主函数
	    int index;//整数索引
	    for (int i = 1; i <array.length; i++) {//比较相邻两个元素,较大的数往后冒泡
	     index = 0;						//整数索引
	     for (int j = 1; j <= array.length - i; j++) {//元素长度
	      if (array[j] > array[index]) {//如果前一个元素比后一个元素大,则两元素互换
	       index = j;					//整数索引
	      }
	     }
	     // 换在置array.length-i和index(最大值)上的两个数
	     int temp = array[array.length - i]; // 把第一个元素值保存到临时变量中
	     array[array.length - i] = array[index]; // 把第二个元素值保存到第一个元素单元中 
	     array[index] = temp; // 把临时变量也就是第一个元素原值保存到第二个元素中
	    }
	     showArray(array);//输出直接选择排序后的数组值 
	   }
	   /**
	    * 显示数组中的所有元素
	    *  @param array
	    *      要显示的数组
	    */
	   public void showArray(int[] array) {//创建一个数组,这个数组元素是乱序的
	    System.out.println("选择排序的结果为:"); //输出结果
	    for (int i : array) { //遍历数组
	     System.out.print(i + " ");//输出每个数组元素值
	    }
	    System.out.println();//输出值
	   }
	   public static void main (String[] args) {//创建一个数组,这个数组元素是乱序的
	    int[] array ={63, 4, 24, 1, 3, 15 };//创建排序类的对象
	    TTT12 sorter=new TTT12();//存放代码的文件名
	    sorter.sort(array);//调用排序方法数组排序
	   }
	}

结果

4.5.2  算法:选择排序

 直接选择排序方法属于选择排序的一种,它的排序速度要比冒泡排序快一些,也是常用的排序算法,是初学者应该掌握的。

4.5.3  Arrays.Sort ()方法

通过Arrays类的静态sort()方法可实现对数组的排序,sort()方法提供了多种使用方式,可对任意类型数组进行升序排序。 

例4.13  

代码 

 结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值