IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> JAVA基础——数组 -> 正文阅读

[Java知识库]JAVA基础——数组

一、数组概述

1.数组的理解:数组(Array),是多个相同类型数据按一定顺序排列的集合。使用一个名字命名
?,并通过编号的方式对这些数据进行统一管理。
?2.数组相关的概念
??①数组名
??②元素
? ③角标 、下标、索引
? ④数组的长度:存储元素的个数
??

3.数组的特点:
?①数组是有序排列的。
?②数组属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型
?③创建数组对象会在内存中开辟一整块连续的空间。
?④数组长度一旦确定就不可以去修改。
?
4. 数组的分类:
??① 按照维数:一维、二维等。
??② 按照数组元素的类型:基本数据类型元素的数组、引用数据类型元素的数组。

二、一维数组

1.一维数组的声明和初始化

int num; //声明
		num = 10; //初始化
		int id = 1001; //声明+初始化
        
		int[] ids; //声明
		//静态初始化:数组的初始化和数组元素的赋值操作同时进行
		ids = new int[]{1001,1002,1003,1004};
		
		//动态初始化:数组的初始化和数组元素的赋值操作分开进行
		String[] names = new String[5];
		
		//总结:数组一旦初始化完成,其长度就确定了。

?2.如何调用数组指定位置的元素:通过角标的方式调用

//数组的角标(索引)从0开始的,到数组长度-1结束。
		names[0] = "小明";
		names[1] = "小贺";
		names[2] = "小张";
		names[3] = "小孙";
		names[4] = "小朱"; //charAt(0)

3.如何获取数组的长度

//属性:length
		System.out.println(names.length);//5
		System.out.println(ids.length);

4.如何遍历数组

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

5.不同类型一维数组的默认初始化值是多少?

?①数组元素是整型:0
?②数组元素是浮点型:0.0
?③数组元素是char型:0 或‘\u0000’,而非‘0’
?④数组元素是boolean型:false
?⑤数组元素是引用数据类型时:null

public class ArrayTest1 {
	public static void main(String[] args) {
		//5.数组元素的默认初始化值
		int[] arr = new int[4];
		for(int i =0;i < arr.length;i++) {
			System.out.println(arr[i]);
		}
	System.out.println("****************");
		short[] arr1 = new short[4];
		for(int i =0;i < arr1.length;i++) {
			System.out.println(arr1[i]);
		}
		System.out.println("****************");
		float[] arr2 = new float[4];
		for(int i =0;i < arr2.length;i++) {
			System.out.println(arr2[i]);
	}
		System.out.println("****************");
		char[] arr3 = new char[4];
		for(int i =0;i < arr3.length;i++) {
			System.out.println("-------"+ arr3[i] + "****");
			}
		if(arr3[0] == 0) {
			System.out.println("你好!");
		}
		System.out.println("****************");
		boolean[] arr4 = new boolean[5];
		System.out.println(arr4[0]);
		
		System.out.println("****************");
		String[] arr5 = new String[5];
		System.out.println(arr5[0]);
		if(arr5[0] == null) {
			System.out.println("太原天气不错!");
		}
		
	}
}
//数组小练习
public class ArrayDemo {
	public static void main(String[] args) {
		
	
	int[] arr = new int[] {5,2,1,0,3,4};
	int[] index = new int[] {2,0,0,2,4,1,5,5,2,1,2};
	String tel = "";
	for(int i = 0;i < index.length;i++) {
		tel += arr[index[i]];
	}
		System.out.println("武先生");
		System.out.println("联系方式:" + tel);
}

三、二维数组

1.对于二维数组的理解

对于二维数组的理解,我们可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。其实,从数组底层的运行机制来看,其实没有多维数组。

2.二维数组的声明和初始化

//二维数组的声明和初始化
	int[] arr = new int[] {1,2,3};//一维数组
	//静态初始化
	int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}};
	//动态初始化1
	String[][] arr2 = new String[3][2];
	//动态初始化2
	String[][] arr3 = new String[3][];
	
//错误情况
//	String[][] arr4 = new String[][4];
//	String[4][3] arr5 = new String[][];
//	int[][] arr1 = new int[4][3]{{1,2,3},{4,5},{6,7,8}};
	
	//正确
	int[] arr4[] = new int[][]{{1,2,3},{4,5},{6,7,8}};
	int[][] arr5 = {{1,2,3},{4,5},{6,7,8}};

3.如何去调用二维数组指定位置的元素

//调用
System.out.println(arr1[0][1]);//2
	System.out.println(arr2[1][1]);//null
	
	arr3[1] = new String[4];
	System.out.println(arr3[1][0]);

4.如何二维获取数组长度

//获取数组长度
	System.out.println(arr4.length);//3
	System.out.println(arr4[0].length);//3
	System.out.println(arr4[1].length);
	

5.如何遍历二维数组

//遍历
 for(int i = 0;i < arr4.length;i++) {
        	 
        	 for(int j = 0;j < arr4[i].length;j++) {
        	 System.out.println(arr4[i][j] + " ");
        	 }
        	 System.out.println();
        	 }

6.二维数组例题(杨辉三角)

/*
 * 使用二维数组打印一个十行的杨辉三角
 * 
 * 1.第一行有1个元素,第n行有n个元素
 * 2.每一行的第一个元素和最后一个元素是1
 * 3.第三行开始,对于非第一个元素和最后一个元素的元素,即:
 * yangHui[i][j] = yangHui[i-1][j-1] + yangHui[i-1][j];
 * 
 */

public class YangHuiTest {
	public static void main(String[] args) {
		//1.声明并初始化二维数组
		int[][] yangHui = new int[10][];
		
		//2.给数组的元素赋值
		for(int i = 0; i < yangHui.length;i++) {
			yangHui[i] = new int[i + 1];
			//给首末元素赋值
			yangHui[i][0] = yangHui[i][i] = 1;
			//给每行的非首末元素赋值
			if(i > 1) {
				for(int j = 1;j < yangHui[i].length - 1; j++) {
					yangHui[i][j] = yangHui[i-1][j-1] + yangHui[i-1][j];
				}
			}
			
		}
		
		//3.遍历
		for(int i = 0;i < yangHui.length;i++) {
			for(int j = 0;j < yangHui[i].length;j++) {
				
				System.out.print(yangHui[i][j] + " ");
			}
			System.out.println();
		}
	}

四、关于数组的常见算法

1.求数值型数组中元素的最大值、最小值、平均数、总和等

/*
 * 算法的考查;求数值型数组中元素的最大值、最小值、平均数、总和等
 * 
 * 定义一个int型的一维数组。包含十个元素,分别赋一些随机数,
 * 然后求出所有元素的最大值,最小值,和值,平均数,并输出出来。
 * 要求:所有随机数都是俩位数
 * 
 * [10,99]
 * 公式“(int)(Math.random() * (99 - 10 + 1) + 10)
 */

public class ArrayTest1 {
	public static void main(String[] args) {
		int[] arr = new int [10];
		
		for(int i = 0;i < arr.length;i++) {
			arr[i] = (int)(Math.random() * (99 - 10 + 1) + 10) ;
		}
		//遍历
		for(int i = 0;i < arr.length;i++) {
			System.out.println(arr[i]);
		}
		System.out.println();
		//求数组元素的最大值
		int maxValue = arr[0];
		for(int i = 1;i < arr.length;i++)
		{
			if(maxValue < arr[i]) {
				maxValue = arr[i];
			}
		}
		System.out.println("最大值为:" + maxValue);
		
		//求数组元素的最小值
		int minValue = arr[0];
		for(int i = 0;i < arr.length; i++) {
			if(arr[i] < minValue) {
				maxValue = arr[i];
			}
		}
		System.out.println("最小值为:" + minValue);
		
		//求数组元素的和
		int sum = 0;
		for(int i = 0;i < arr.length; i++) {
			sum += arr[i];
			}
			System.out.println("数组元素的和为:" + sum);


		//求数组元素的平均数
		int average = 0;
		average = sum / arr.length;
		System.out.println("数组元素的平均数为:" + average);
}

2.数组的复制、反转、查找(线性查找、二分法查找)

public class ArrayTest2 {
public static void main(String[] args) {
		
		String[] arr = new String[] {"jj","dd","mm","oo","qq","ss"};
		
		//数组的复制(区别于数组变量的赋值;arr1 = arr)
		String[] arr1 = new String[arr.length];
		for(int i = 0; i < arr1.length;i++)
		{
			arr1[i] = arr[i];
		}
		
		//数组的反转
		//方法一:
		//for(int i = 0;i < arr.length / 2;i++) {
			//String temp = arr[i];
			//arr[i] =arr[arr.length - i - 1];
			//arr[arr.length - i - 1] = temp;
		//}
		
		//方法二:
		for(int i = 0,j = arr.length - 1;i < j;i++,j--)
		{
			String temp = arr[i];
			arr[i] = arr[j];
			arr[j] = temp;
		}
		
		//遍历
		for(int i = 0;i < arr.length;i++) {
			
			System.out.print(arr[i] + "\t");
		}
		System.out.println();
		
		
		//查找
		//线性查找:
		String dest = "dd";
		
		boolean isFlag = true;
		for(int i = 0; i < arr.length;i++) {
			if(dest.equals(arr[i])) {
				System.out.println("找到了指定的元素,位置为:" + i);
				break;
			}
		}
		if(isFlag) {
		System.out.println("很遗憾,没有找到哦!");
		
		}
		
		//二分法查找:
		//前提:所要查找的数组必须有序
		int[] arr2 = new int[] {-98,-35,5,78,99,65,78,43,55,79};
		
		int dest1 = -35;
		int head = 0; //初始的首索引
		int end = arr.length - 1;
		boolean isFlag1 = true;
		while(head <= end) {
			int middle = (head + end)/2;
			
			if(dest1 == arr2[middle]) {
				System.out.println("找到指定的元素,位置为:" + middle);
				isFlag1 = false;
				break;
			}else if(arr2[middle] > dest1) {
				end = middle - 1;
			}else {
				head = middle + 1;
			}
		}
		
				if(isFlag1) {
					System.out.println("很遗憾,没有找到!");
				}	
		
	}
}

3.数组的排序(冒泡排序)

public class BubbleSortTest {
public static void main(String[] args) {
		
	
	
	int[] arr = new int[]{53,44,68,-77,89,45,22,33,38};
	
	//冒泡排序
	for(int i = 0;i < arr.length - 1;i++)
	{
		for(int j = 0;j < arr.length - 1 - i;j++) {
			
			if(arr[j] > arr[j + 1]) {
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
	
	
	for(int i = 0 ;i < arr.length;i++) {
		System.out.println(arr[i] + "\t");
	}
		
	}
}

五、Arrays工具类的使用

public class ArrayTest {
public static void main(String[] args) {
		
	
	//1.boolean equals(int[] a,int[] b):判断俩个数组是否相等
	int[] arr1= new int[] {1,2,3,4};
	int[] arr2 = new int [] {1,3,2,4};
	boolean isEquals = Arrays.equals(arr1,arr2);
	System.out.println(isEquals);
	
	
	//2.String toString(int[] a):输出数组信息
	System.out.println(Arrays.toString(arr1));
	
	//3.void fill(int[] a,int val):将指定的值填充到数组当中
	Arrays.fill(arr1,10);
	System.out.println(Arrays.toString(arr1));

	//4.void sort(int[] a):对数组进行排序
	Arrays.sort(arr2);
	System.out.println(Arrays.toString(arr2));
	
	//5.int binarySearch(int[] a,int key)
	int[] arr3 = new int[] {-98,-35,5,78,99,65,78,43,55,79};
	int index = Arrays.binarySearch(arr3, 211);
	if(index >= 0) {
	System.out.println(index);
	}else {
		System.out.println("未找到");
	}
 }
}

六、数组中的常见异常

1.数组角标越界的异常:ArrayIndexOutOfBoundsExcetion

2.空指针异常:NullPointerException

public class ArrayException {
public static void main(String[] args) {
	// 1.数组角标越界的异常:ArrayIndexOutOfBoundsExcetion
	int[] arr = new int[] {1,2,3,4,5};
	
//	for(int i ;i <= arr.length;i++) {
//		System.out.println(arr[i]);
		
	//}
//	System.out.println(arr[-2]);
	
	//2.空指针异常:NullPointerException
	//情况一:
//	int[] arr1 = new int[] {1,2,3};
//	arr1 = null;
//	System.out.println(arr1[0]);
	
	//情况二;
//	int [][] arr2 = new int [4][];
//	System.out.println(arr2[0][0]);

	//情况三:
	String[] arr3 = new String[] {"aa","bb","cc"};
	arr3[0] = null;
	System.out.println(arr3[0].toString());
}
}

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-18 12:34:18  更:2021-08-18 12:35:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:16:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码