Java第五章数组

文章介绍了Java中数组的概念,包括一维数组的声明、分配内存、初始化和使用,以及二维数组的创建、初始化和使用。此外,还讨论了数组的基本操作,如遍历、填充替换元素、排序和复制,以及冒泡排序和直接选择排序这两种排序算法的原理和实现。
摘要由CSDN通过智能技术生成

        一,数组概述

        数组是具有相同类型数据类型的一组数据的集合。是相同类型的用一个标识符封装到一起的基本类型数据序列或对象序列,可以用一个统一的数组名和下标来唯一确定数组中的元素。

        二,一维数组

        一维数组实质上是一组相同类型数据的线性集合,当在程序中需要处理一组数据,或者传递一组数据时,可以应用这种类型的数组。

  • 创建一维数组
  1. 数组作为对象允许使用new关键字进行内存分配,在使用数组之前,必须首先定义数组变量所属的类型。一维数组有两种形式。
  2. 先声明,再用new关键字进行分配内存。数组元素类型 数组名字[];数组元素类型[] 数组名字;
  3. 数组元素类型决定了数组的数据类型,它可以是Java中任意的数据类型,包括简单类型和组合类型。数组名字为一个合法的标识符,符号“[]”指明该变量是一个数组类型变量。单个“[]”表示要创建的数组是一个一维数组。声明一维数组:int arr[];//声明int型数组,数组中的每个元素都是int型数值。
  4. 声明数组后,还不能立即访问它的任何元素,因为声明数组只是给出了数组名字和元素的数据类型,要想真正的使用数组,还要为它分配内存空间。在为数组分配内存空间时必须指明数组的长度。为数组分配内存空间的语法格式如:数组名字 = new 数组元素的类型[数组元素];为数组分配内存例如:arr = new int[5];
  5. 注意:使用new关键字为数组分配内存时,整型数组中各个元素的初始值都为0。
  • 声明的同时为数组分配内存
  1. 这种创建数组的方法是将数组的声明和内存的分配合在一起执行。如:数组元素的类型 数组名 = new 数组元素的类型[数组元素的个数];
  2. 声明并为数组分配内存。如:int month[] = new int[12]。
  • 初始化一维数组
  1. 数组与基本数据类型一样可以进行初始化操作。数组的初始化可分为别初始化数组中的每个元素。数组的初始化有以下两种方式:
  2. int arr[] = new int[]{1,2,3,4,5,25};//第一种初始化方式;int arr2[] = {34;23;12;6};//第二种初始化方式。
  • 使用一维数组

        在Java集合中,一维数组是常见的一种数据结构,接下来请看如下例题。

        三,二维数组

  • 创建二维数组
  1. 先声明,再用new关键字进行内存分配。语法如:数组元素的类型 数组名字[][]; 数组元素的类型[][] 数组名字;
  2. 声明二维数组。代码如:int a[][];
  3. 第一种分配方式:a = new int[2][4]。第二种分配方式:a = new int[2][]; a[0] = new int[2]; a[1] = new int[3];
  • 声明的同时为数组分配内存

        代码如:int a = new int[2][4]

  • 初始化二维数组
  1. 二维数组的初始化与一维数组初始化类似,语法如:type arrayname[][] = {value1,value2,...,value};
  2. type:数组数据类型。arrayname:数组名称,一个合法的标识符。value:二维数组中各元素都代表一个一维数组。
  3. 初始化二维数组,代码如:int myarr[][] = {{12,0}{45,10}};
  • 使用二维数组

        二维数组在实际应用中用得非常广泛。下面的实例就是使用二维数组输出一个3行4列且所有元素都是0的短距。

         四,数组的基本操作

  •  遍历数组

        遍历数组就是获取数组中的每个元素。通常遍历数组都是使用for循环来实现。遍历一维数组很简单,所以不介绍,介绍遍历二维数组的使用方法。

        例题:呈梯形输出二维数组中的元素。代码如下:

         例题:使用foreach语句遍历二维数组。代码如下:

  •  填充替换数组元素

        数组中的元素定义完成后,可通过Arrays类的静态方法fill()来对数组中的元素进行替换。该方法通过各种重载形式可完成对任意类型的数组元素的替换。fill()方法有两种参数类型,下面以int型数组为例讲解fill()方法的使用方法。

        1.fill(int[] a,int value)替换数组元素:Arrays.fill(数组名,值);

        该方法可将指定的int值分配给int型数组的每个元素,语法如:fill(int[] a,int value)。a:要进行元素替换的数组。value:要存储数组中的所有元素的值。语法如Arrays.fill(数组名,值);

        例题:使用fill()方法填充数组元素。代码如下:       

         2.fill(int[] a,int fromlndex,int tolndex,int value)替换数组部分元素:Arrays.fill(数组名,前索引,后索引,值);(前改后不改)

        该方法将指定的int值分配给int型数组指定范围中的每个元素。填充的范围从索引fromindex(包括)一直到索引toIndex(不包括)。如果fromIndex == toIndex,则填充范围为空。语法如:fill(int[] a,int fromlndex,int tolndex,int value)。a:要进行填充的数组。fromIndex:要使用指定值填充的第一个元素的索引(包括)。toIndex:要使用指定值填充的最后一个元素的索引(不包括)。value:要分配给数组指定范围中的每个元素的值。注意:如果索引位置大于或等于要进行填充的数组的长度,就会报错。

        例题:使用fill()方法替换数组中的元素。代码如下:

  • 对数组进行排序
  1. 通过Arrays类的静态方法sort()可以实现对数组的排序。sort()方法提供了多种重载形式,可以任意类型的数组进行升序排序。语法如:Arrays.sort(数组名)。
  2. 使用sort()方法将数组排序后输出代码如下:
  •  复制数组

        Arrays类的copyOf()方法与copyOfRange()方法可以实现对数组的复制。copyOf方法是复制数组至指定长度,copyOfRange()方法则将指定数组的指定长度复制到一个新数组中。

         1.copyOf()方法

        该方法提供多种重载形式,用于满足不同数据类型的复制。语法如:新数组名=Arrays.copyOf(旧数组名,新数组长度);特点:复制数组元素:空位补0溢出去掉

        例题:复制数组。代码如下:

         2.copyOfRange()方法

        该方法同样提供了多重载形式。语法如:Arrays.copyOfRange(旧数组名,前索引,后索引);特点:复制数组部分元素:前在后不在。

        按照索引复制数组代码如下:

  •  查询数组

        Arrays类的binarySearch()方法,可以使用二分搜索法来搜索指定数组,以获得指定对象。该方法返回要搜索元素的索引值。binarySearch()方法提供了多种重载形式,用于满足各种类型数组的查找需要。binarySearch()方法有两种参数类型。

        1.binarySearch(Object[]a,Obejct key)

        查询数组元素:先排序,再查询。语法如:索引 = Arrays.binarySearch(数组名,元素);

        例题:查找元素在数组中的索引位置。代码如下:

                2.binarySearch(Objecr[] a,int fromIndex,int toIndex,Obejct key)

         查询数组元素:先排序,再查询 前含后不含。语法如:索引 = Arrays.binarySearch(数组名,前索引,后索引,元素);

        例题:在指定范围内查找元素在数组中的索引位置。代码如下:

        五,数组排序算法

  • 冒泡排序法
  1. 基本思想:冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。
  2. 算法步骤:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

     3.算法实现:冒泡排序

  •  直接选择排序

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

     2. 算法示例:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序地放在已排好序的数列的最后,直到全部待排序的数据元素排完。例如:

        初始数组资源【63 4 24 1 3 15】第一趟排序后 【15 4 24 1 3 】63

        第二趟排序后【15 4 24 1 3】63 第三趟排序后 【1 4 3 】15 24 63

        第四趟排序后【1 3】4 15 24 63 第五趟排序后 【1】3  4 15 24 63

     3.算法实现:直接选择排序

  •  反转排序

        1.基本思想:把数组最后一个元素与第一个元素替换,倒数第二个元素与第二个元素替换,以此类推,直到把所有数组元素反转替换。

        2.算法示例:反转排序是对数值两边的元素进行替换,所以只需要循环数组长度的半数次,如数组长度为7,那么for循环只需要循环3次。

        例如:初始化数组资源【10 20 30 40 50 60】第一次排序后 60【20 30 40 50 】10

        第二次排序后 60 50 【30 40】20 10 第三次排序后 60 50 40 30 20 10 

        3.算法实现:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Violet Evegarden

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值