java语言基础下

本文详细介绍了Java数组的概念、初始化、基本操作、排序方法及多维数组的使用。通过具体实例展示了如何进行数组遍历、获取最大最小值以及实现冒泡排序和选择排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



数组

1、数组概述

数组概念为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组

定义数组的格式如下

type arrayName[ ];     

type[ ] arrayName;
       其中类型(type)可以为Java中任意的数据类型,包括简单类型组合类型,
它表示数组所存的元素的数据类型

数组名arrayName为一个合法的标识符,[]指明该变量是一个数组类型变量。

数组的初始化方式

1)动态初始化:数组定义与为数组分配空间和赋值的操作分开进行;
2)静态初始化:在定义数字的同时就为数组元素分配空间并赋值;
3)默认初始化:数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被隐式初始化。

数组运用实列

实列1

int arr[] = new int[5];

for(int x= 0; x<arr.length; x++)
{
	arr[x] = x;
}
以上实列中使用了默认初始化,并在后面变量了数组,并用for循环给数组赋值。

实列2

int[] arr ={5,1,6,4,2,8,9};

for(int i = 0;i < arr.length; i++)
{
      System.out.println("arr["+i+"]="+arr[i]);
}


2、数组的基本操作

数组是一个固定长度的集合,也就是它不能增加元素也不能减少。因此在集合的“增删改查”四个基本操作中增和删是不存在的。只有改和查。

因为数组存在角标,因此,数组的修改和查询可使用角标,因此数组的基本操作格式如下:

访问数组元素:数组名[角标]

修改数组元素:数组名[角标] = 目标值


数组的遍历

由于数组是一个集合,存在很多元素,取得所有元素成为一种很普遍的需求。

通常使用循环语句来遍历整个数组。

遍历是数组操作的基础,通过遍历数组,我们可以做其他更多复杂的操作,如获取最大最小值和排序等操作。


思路:

       1,获取最值需要进行比较。每一次比较都会有一个较大的值。因为该值不确定。通过一个变量进行临储。
       2,让数组中的每一个元素都和这个变量中的值进行比较。如果大于了变量中的值,就用该该变量记录较大值。
       3,当所有的元素都比较完成,那么该变量中存储的就是数组中的最大值了。
步骤:
       1,定义变量。初始化为数组中任意一个元素即可。
       2,通过循环语句对数组进行遍历。
       3,在变量过程中定义判断条件,如果遍历到的元素比变量中的元素大,就赋值给该变量。
需要定义一个功能来完成。以便提高复用性。

public static int getMax(int[] arr)
{
      int max = arr[0];
      for(int x=1; x<arr.length; x++)
      {
            if(arr[x]>max)
                  max = arr[x];
      }
       return max;
}


获取最小值。原理和活的最大值相同。代码如下:

public static int getMin(int[] arr)
{
       int min = 0;
       for(int x=1; x<arr.length; x++)
       {
             if(arr[x]<arr[min])
             min = x;
       }
       return arr[min];
}
3、数组的排序

关于数组排序的问题,我们前辈已经给出了很多各有特点的算法:快速排序法、冒泡法、选择排序法、插入排序法等。

这里我们主要需要掌握的是最常用的冒泡法和选择排序法

冒泡排序

时间复杂度为O(n^2)

优点:1.“编程复杂度”很低,很容易写出代码;2.稳定性高。稳定性是指它可以适用普遍的情况,在所有情况下所表现稳定。

冒泡排序思想示意图:


冒泡排序实列如下:

public static void maopao (int[] arr)
{
    for (int x=0;x<arr.length-1 ;x++ )
    {
        for (int y=0;y<arr.length-x-1 ;y++ )
        {
           if (arr[y]<arr[y+1])
             {
               int temp=arr[y];
               arr[y]=arr[y+1];
               arr[y+1]=temp;
             }
         }
    }
}
选择排序

时间复杂度为O(n2)。

其基本思路图如下:


选择排序过程中,所需移动记录的次数比较少。最好情况下,即待排序记录初始状态就已经是正序排列了,则不需要移动记录。最坏情况下,即待排序记录初始状态是按逆序排列的,则需要移动记录的次数最多为3(n-1)。

选择排序实列如下:

public static void paixu(int[] arr)//选择排序
{
     for (int x=0;x<arr.length-1 ;x++ )
     {
        for (int y=x+1;y<arr.length ;y++ )
        {
           if (arr[x]>arr[y])
           {
             int temp=arr[x];
             arr[x]=arr[y];
             arr[y]=temp;
           }
        }
      }
}


4、多维数组

概念:因为数组的元素可以是任意数据,也就是说数组本身也是能作为另一个数组的元素,这就是多维数组。数组元素是一维的数组被称为二位数组。依次类推。


由于实际使用中我们很少用到三维以上的数组,同时多维数组的使用和二维数组可类推,下面我们就重点了解二维数组


定义二维数组的格式

type arrayName[][];

type[][] arrayName;


分配空间:

与一维数组一样,这时对数组元素也没有分配内存空间,同要使用运算符new来分配内存,然后才可以访问每个元素。

对高维数组来说,分配内存空间有下面几种方法:

1. 直接为每一维分配空间,如:

int a[][]=new int[2][3];

2. 从最高维开始,分别为每一维分配空间,如:

int a[][]=new int[2][];
a[0]=new int[3];
a[1]=new int[3];


二维数组的初始化

1. 默认初始化,在遍历数组赋值。

int[][] arr = new int[2][3];

for(int i = 0; i < arr.length;i++)
{
     for(int j = 0;j < arr[i].length;j++)
     {
              arr[i][j] = i+i*j;
      }
} 

在遍历数组前,数组中所有元素为默认初始化的值0;

2. 在定义数组的同时进行初始化。

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

定义了一个3×2的数组,并对每个元素赋值。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值