栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【java】java基础-数组相关知识

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【java】java基础-数组相关知识

文章目录

一、数组二、数组的分类

1.一维数组2.多维数组 三、数组的使用

一、数组

数组: 是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。

数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是 这块连续空间的首地址。数组的长度一旦确定,就不能修改。我们可以直接通过下标(或索引)的方式调用指定位置的元素,速度很快。分类:按维度分为一维、二维等;按照元素的数据类型分为基本数据类型元素的数组、引用数据类型元素的数组(即对象数组)。 二、数组的分类 1.一维数组

①如何对一维数组进行声明和初始化?
–首先指明数组元素类型,由于数组本身是引用数据类型,所以需要new。如

int[] ids;//声明为int型数组
ids = new int[]{21,22,23};//初始化

以上为静态初始化过程(数组元素为基本数据类型,数组初始化和数组元素的赋值操作同时进行);
对于动态初始化(数组初始化和数组元素的赋值操作分开进行),则写法为

String[] names = new String[5];

②如何获取数组长度及遍历数组?

String[] names = new String[3];
names[0] = "张三";
names[1] = "李四";
names[2] = "王五";
System.out.println(names.length); //打印出该数组长度
for(int i = 0;i 

③对数组的内存解析
内存的简化: 简单分为栈和堆,栈中存的局部变量(放方法中的变量均为局部变量),堆中存的new出来的结构,如图(参考尚硅谷学习)。

理解分析: 右上角为示例部分代码,以第一行为例分析,arr在main方法中,是局部变量,存入栈中;右侧new出了长度为3的数组,存入堆中;三个连续的单元有首地址值,假设为0x34ab(十六进制),会将其赋给栈空间中的arr,则其会通过此地址值找到堆中的数组,从而联系起来;然后进行赋值为1 2 3(因为默认为0 0 0)。

2.多维数组

分析二维数组:可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。
①声明与初始化
静态初始化:

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

动态初始化:

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

②长度与遍历

//获取数组长度
int[][] arr3 = new int[][]{{2,3,4},{2,5},{1,2,4}};
	System.out.println(arr3[].length);//3	
	System.out.println(arr3[0].length);	//3
	System.out.println(arr3[1].length);	//2
	for(int i = 0;i 
三、数组的使用 

1.数组元素的赋值
例: 创建一个长度为6的int型数组,要求随机生成数组元素的值,且都在1~30之间。同时,要求元素的值各不相同。

补充: 生成随机数的方法是通过java.Math包的random方法得到。
公式是:(数据类型)(最小值+Math.random()*(最大值-最小值+1))
如1~30之间的写法是**(int)( 1 + (Math.random() * 30))**

方法1:

public class Array {
	public static void main(String[] args) {	
		int[] arr = new int[6];
		for (int i = 0; i < arr.length; i++) {// [0,1) [0,30) [1,31)
			arr[i] = (int)( 1 + (Math.random() * 30));
			boolean flag = false;//标志位
			while (true) {
				for (int j = 0; j < i; j++) {
					if (arr[i] == arr[j]) {
						flag = true;
						break;
					}
				}
				if (flag) {
					arr[i] = (int)( 1 + (Math.random() * 30));
					flag = false;
					continue;
				}
				break;
			}
		}

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

方法2:

public class Array {
	public static void main(String[] args) {	
		int[] arr = new int[6];
		for (int i = 0; i < arr.length; i++) {// [0,1) [0,30) [1,31)
			arr[i] = (int)( 1 + (Math.random() * 30));
			
				for (int j = 0; j < i; j++) {
					if (arr[i] == arr[j]) {
						i--;
						break;
					}
				}
			}

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

2.求最大和最小值
在main中写法:

	int[] arr;
		arr=new int[]{1,2,3,4,5,6};
		int maxValue = 0;
		for(int i = 0; i < arr.length;i++) {
		if(maxValue < arr[i]) {
		maxValue = arr[i];		
		  }	
		}
		int minValue =arr[0];//初始设最小为数组第一个元素
		for(int i = 1; i < arr.length;i++) {
		if(minValue > arr[i]) {
		   minValue = arr[i];		
		  }	
		}	
System.out.println("最大为:"+maxValue +"最小为:"+minValue);
	}	

3.数组的查找(线性、二分法查找)
3.1 线性查找

int[] arr;
		arr=new int[]{3,22,32,44,13,64};
		int cha=64;
		for(int i = 0;i  

3.2 二分法查找
前提:所要查找的数组必须有序

int[] arr= new int[]{3,4,6,8,13,24};
		int cha=13;
		int head = 0;//初始首索引
		int end = arr.length-1;//初始末索引
		boolean isFlag=true;
		while( head <= end)
		{
			int middle = (head + end)/2;
			if(cha == arr[middle])
			{
				System.out.println("找到了所查找元素,位置为:"+middle);
				isFlag=false;
				break;
			}
			else if(cha < arr[middle])
			{
				end = middle-1;	
			}
			else
			{
				head = middle+1;	
			}
		}
		if(isFlag) {
			System.out.println("没有找到!");
		}

3.3 冒泡排序与快速排序
待更新

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/737546.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号