黑马程序员——————————基础语法3之数组

本文详细介绍了数组的概念、内存结构、静态初始化及其常见问题,并提供了数组的常见操作示例,包括遍历、获取最大值、排序和折半查找等。此外,文章还讲解了二维数组的定义和使用方式,以及不同形式的二维数组表示方法,同时提供了一个将元素插入有序数组并保持其有序性的实践案例。

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

数组

一、概述

数组定义

概念:同一种类型的数据的集合,是一个容器

好处:可自动给元素编号(从0开始),方便操作这些元素

格式:(1)元素类型[ ] 数组名 = new 元素类型[元素个数];
(2)元素类型[ ] 数组名 = new 元素类型[ ]{元素1,元素2......};

内存结构

栈内存:用于存储局部变量,当数据使用完,所占空间会自动释放

堆内存:1,通过new创建的实体都存放在堆内存中,如数组和对象
2,每一个实体都有内存地址值
3,实体中的变量都有默认初始化值
4,实体不再被使用,会在某个不确定的时间被垃圾回收器回收

方法区,本地方法区,寄存器

二、静态初始化及常见问题

静态初始化

静态初始化:即定义数组的同时为数组元素分配空间并赋值
如:int[] arr = new int[]{3,1,6,5,4};
int[] arr = {3,1,6,5,4};

常见异常

1,ArrayIndexOutOfBoundsException: 操作数组时,访问到了数组中不存在的角标。
2,NullPointerException:空指针异常:当引用没有任何指向值为null的情况,该引用还在用于操作实体。

三、常见操作

遍历

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


获取最值

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 void selectSort(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;
					//swap(arr,x,y);
				}
			}
		}
	}


/*
	冒泡排序
	*/

	public static void bubbleSort(int[] arr)
	{
		for(int x=0; x<arr.length-1; x++)
		{									
			for(int y=0; y<arr.length-x-1; y++)//-x:让每一次比较的元素减少,-1:避免角标越界。
			{
				if(arr[y]<arr[y+1])
				{
					/*
					int temp = arr[y];
					arr[y] = arr[y+1];
					arr[y+1] = temp;
					*/
					swap(arr,y,y+1);
				}
			}
		}
	}


折半查找

public static int halfSearch_2(int[] arr,int key)
	{
		int min = 0,max = arr.length-1,mid;

		while(min<=max)
		{
			mid = (max+min)>>1;

			if(key>arr[mid])
				min = mid + 1;
			else if(key<arr[mid])
				max = mid - 1;
			else
				return mid;
		}
		return -1;
	}

练习:有一个有序的数组,想要将一个元素插入到该数组中,
还要保证该数组是有序的。如何获取该元素在数组中的位置。
[解答]依然是折半查找,如果该元素存在于数组中,那么返回元素在数组中的位置,如果不存在,返回最小值得位置,即min


进制转换

//查表法优化
public static void trans(int num,int base,int offset)
	{

		if(num==0)
		{
			System.out.println(0);
			return ;
		}
		char[] chs = {'0','1','2','3'
					,'4','5','6','7'
					,'8','9','A','B'
					,'C','D','E','F'};
		char[] arr = new char[32];

		int pos = arr.length;

		while(num!=0)
		{
			int temp = num & base;
			arr[--pos] = chs[temp];
			num = num >>> offset;
		}

		for(int x=pos; x<arr.length; x++)
		{
			System.out.print(arr[x]);
		}

		return ;
	}

四、二维数组

格式

格式一:int [] [] arr = new int[3][2];
    1,定义了名为arr的二维数组
    2, 二维数组中有3个一维数组
    3,每一个一维数组中有2个元素
    4,一维数组的名称分别为:arr[0],arr[1],arr[2],给第一个一维数组的1角标位赋值:arr[0][1]=78;


格式二:int [] [] arr = new int[3][];
    1,二维数组中有三个一维数组
    2,每个一维数组都是默认初始化值null
    3,可以对三个一维数组分别进行初始化:
         arr[0] = new int[3];
         arr[1] = new int[1]
         arr[2] = new int[2];


格式三:int [] [] arr = {{3,8,2},{2,7},{9,0,1,6}};
    1,定义一个二维数组
    2,二维数组中有三个一维数组
    3,每个一维数组的具体元素也已经初始化
          第一个一维数组{3,8,2};
          第二个一维数组{2,7};
         第三个一维数组{9,0,1,6};
    4,第三个一维数组的长度表示:arr[2].length;

特殊写法

/*
int[] x; int x[];
int[][] y; int y[][]; int[] y[];


int[] x,y[];//x一维,y二维。
int[] x;
int[] y[];

a.
x[0] = y;//error

b.
y[0] = x;//yes

c.
y[0][0] = x;//error

d.
x[0][0] = y;//error

e.
y[0][0] = x[0];//yes

f.
x=y;//error
*/

练习

//获取arr数组所有元素的和
int[][] arr = {{3,5,1,7},{2,3,5,8},{6,1,8,2}};

		int sum = 0;
		for(int x=0; x<arr.length;x++)
		{
			for(int y=0; y<arr[x].length; y++)
			{
				sum = sum + arr[x][y];
			}
		}

		System.out.println("sum="+sum);


黑马程序员的tb_brand是指在JavaWeb基础教程中创建的一个表。这个表是用来存储品牌信息的,具体的表结构和数据类型需要和JavaBean类中的成员变量保持一致。\[1\]在这个教程中,使用了Maven来构建项目,并且使用了MyBatis作为持久层框架,通过配置pom.xml文件来引入相关依赖。\[2\] Maven是一个用于管理和构建Java项目的工具,它提供了一套标准化的项目结构、构建流程和依赖管理机制。\[3\] #### 引用[.reference_title] - *1* [【JAVAWEB开发】黑马程序员java web案例资料(含Element的删除与修改)](https://blog.youkuaiyun.com/aasd23/article/details/126940147)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [黑马程序员-MyBatis 框架-最全入门笔记、阿伟看了都得说真大、真细、真全!!!](https://blog.youkuaiyun.com/qq_57383364/article/details/128103058)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [JavaWeb——黑马程序员课程笔记](https://blog.youkuaiyun.com/King_ZACC/article/details/128573804)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值