数组

本文详细介绍了Java中的数组,包括声明、赋值、遍历以及数组长度的特性。讲解了如何创建和操作一维及多维数组,并通过实例展示了二维数组的使用。此外,文章还探讨了冒泡排序和选择排序两种基本排序算法的实现,帮助读者理解数组排序的原理。

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

数组是有序的元素序列。若将有限个类型相同的变量的集合命名。那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便,把具有相同类型的若干元素按有序的形式组织起来的一种形式。这些有序排列的同类数据元素的集合称为数组。
数组是用来存放相同数据类型的一种容器,这些相同的数据在容器中是有序排列的。在容器中数据使用下标来标记。数组是在程序运行期间存放数据的容器。
变量:在程序运行期间其值可以改变 存储一个值
数组:在程序运行期间内部数据可以改变 存储多个值

一、数组的声明

  • 数组的长度:数组中元素的个数称为数组的长度
  • 元素:数组中的每一个数据称为元素
  • 数组中的元素都使用下标来确定他在元素中的位置 0------数组的长度-1
    数组的声明代码演示如下:
package com.xingyun.Array;
/**
   * 数组的创建,声明和赋值
 * @author langlang
 * 2020年10月10日下午4:59:51
 * 
 * 
 */
public class ArrayDemo {
	
	public static void main(String[] args) {
		
		//声明一个数组
		//数组的长度一旦声明,在运行期间无法改变
		int  []  nums = new  int [6];
		
		//赋值
		nums[0] = 6;//第一个元素
		nums[1] = 13;//第二个元素
		nums[2] = 56;//第三个元素
		nums[5] = 20;//第六个元素
		
		System.out.println("第"+1+"个元素是"+nums[0]);
		System.out.println("第"+2+"个元素是"+nums[1]);
		
		System.out.println("数组的长度是"+nums.length);
		
		
		//遍历数组
		System.out.println("------元素的遍历------");
//		int  index = 0;
//		for(int i=0;i<6;i++) {
//			System.out.println("第"+(index+1)+"个数字是"+nums[index]);
//			index++;
//		}
		
		
		for(int i=0;i<6;i++) {
			System.out.println("第"+(i+1)+"个元素是"+nums[i]);
		}
		
		
		//第i个元素为nums[i-1],元素的下标从0开始
//		for (int i = 0; i < nums.length; i++) {
//			System.out.println("第"+(i+1)+"个元素是"+nums[i]);
//		}
	}
}

二、数组的具体使用

  • 数组不能一次给所有元素赋值,只能挨个赋值
  • 数组中可以根据元素的下标给指定位置的元素赋值
  • 数组一旦创建其长度不能改变
  • 数组的默认值是null 数组元素的默认值是根据数组的类型而定
    1、赋值
    挨个赋值,根据下标
    在这里插入图片描述
    2.查询
    根据下标查询
    在这里插入图片描述
    使用循环一次性查询所有的数据,
    在这里插入图片描述
    在这里插入图片描述
    注意:当要查询的数组元素下标的值超过数组的元素下标最大值,就会报异常,数组元素下标越界异常。
    在这里插入图片描述
    增强型for循环:
    优点:写法简单,不考虑下标,不会出现下标越界的问题
    缺点:无法获取带指定下标位置的元素,只能一次遍历所有
    在这里插入图片描述

三:二维数组和多维数组

  • 数组中的元素是数组,称为二维数组

  • 语法:
    一维:数据类型 [] 数组名称 = new 数据类型 [];
    二维:数据类型 [][] 数组名称 = new 数据类型 [][];

  • 二维数组的子数组的长度是可以发生变化,子数组的实际表示的数组是可以重新赋值的。数组长度不可变是指你当前所引用的数组的长度不可变,一旦引用发生改变,数组的长度就改变了。
    1.声明
    在这里插入图片描述
    2.赋值
    在这里插入图片描述
    在这里插入图片描述
    3.遍历
    在这里插入图片描述

  • 小例子,通过多维数组实现经济管理学院,代码实现如下

package com.xingyun.Array;
/**
 * 多维数组
 * @author langlang
 * 2020年10月14日下午4:13:35
 *
 */
public class DuoWeiArray {
	/*
	 * 经济管理学院
	 *         电商                                             信管
	 *           1班                                   2班
	 *      stu01,stu02     stu03,stu04
	 */
	public static void main(String[] args) {
		
		//声明一个三维数组
		String  [][][]  JGY = new  String [2][2][2];
		
		//声明班级     每个专业都有两个班级,所以得声明4个班级
		String  []  class01 = new String [] {"stu01","stu02"};
		String  []  class02 = new String [] {"stu03","stu04"};
		String  []  class03 = new String [] {"stu03","stu04"};
		String  []  class04 = new String [] {"stu03","stu04"};

		//声明每个专业    每个专业下有两个班级,每个班级下又有两个学生,所以专业是一个二维数组
		String  [][]  major01 = new String  [2][2];
		String  [][]  major02 = new String  [2][2];
		//给二维数组赋值
		major01[0] = class01;
		major01[1] = class02;
		major02[0] = class03;
		major02[1] = class04;
		
		
		//给经管院赋值两个专业
		JGY[0] = major01;
		JGY[1] = major02;
		
		
		//遍历多维数组
		for (int i = 0; i < JGY.length; i++) {
			System.out.println("*******专业是*******");
//			System.out.println(JGY[i]);
			for (int j = 0; j < JGY[i].length; j++) {
				System.out.println("*******班级是*******");
//				System.out.println(JGY[i][j]);
				for (int k = 0; k < JGY[i][j].length; k++) {
					System.out.println(JGY[i][j][k]);
				}
			}
		}		
	}
}

四、数组的交换

1、数组与数组之间的元素拷贝

在这里插入图片描述

五、数组的排序

排序:正序(从小到大asc)
逆序(从大到小desc)

1. 冒泡排序

  • 冒泡排序,是一种计算机科学领域的较为简单地排序算法
  • 依次比较两个相邻的元素,如果是正序,第一个比第二个大,交换,否则不交换。每一次比较完数组中最大的那个值后,下一次比较的时候就不需要比较上次最大的那个值。
  • 外层循环控制需要比较的次数,内层循环是每一遍具体比较交换的操作。
  • 代码如下
	public static void main(String[] args) {

		int[] grade = new int[] { 1,5,8,3 };
		System.out.println("==========排序前==================");
		for (int i : grade) {
			System.out.print(i + "-----");
		}

		System.out.println("==========排序==================");
		
		int count=0;
		for(int i=0;i<grade.length-1;i++) {//循环比较的次数  
			//每一次实际比较交换的操作  每一次都是从第一个元素开始到上一次最大值前一个
			for(int j=0;j<grade.length-1-i;j++) {
				  int temp=0;
				  if(grade[j]>grade[j+1]) {
					  temp=grade[j];
					  grade[j]=grade[j+1];
					  grade[j+1]=temp;
				  }
				  count++;
			}
		}
		System.out.println("总共比较的次数是:"+count);
		
		
		
		
		System.out.println("==========排序后==================");
		for (int i : grade) {
			System.out.print(i + "-----");
		}

	}

2.选择排序

  • 每一次比较选择一个位置后与后面的每一个元素进行比较,如果当前元素比后面的元素大就交换,每一次比较完将本次的最小值放到当前位置。起始从0开始,以后每一次的比较都从下一个元素开始
  • 代码实现如下
		public static void main(String[] args) {

			int[] grade = new int[] { 5,3,84,46,12,10,5 };
			System.out.println("==========排序前==================");
			for (int i : grade) {
				System.out.print(i + "-----");
			}
			System.out.println("==========排序==================");
			int count=0;
			for(int i=0;i<grade.length-1;i++) {//循环比较的次数  
				//i 是用来确定我们每一次的用来比较的元素     j 用来控制我们的i后面的每一元素的 
				//  每一次使用i 位置的元素  与后面的每一个元素进行两两比较   如果i位置元素比后面比较的元素大 进行交换       
				for(int j=i;j<grade.length-1;j++) {
					  int temp=0;
					  if(grade[i]>grade[j+1]) {
						  temp=grade[i];
						  grade[i]=grade[j+1];
						  grade[j+1]=temp;
					  }
					  count++;
				}
			}
			System.out.println("总共比较的次数是:"+count);
			
			
			System.out.println("==========排序后==================");
			for (int i : grade) {
				System.out.print(i + "-----");
			}

		}

3.插入排序
4.使用标记进行排序操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值