数组知识点整理

数组引入

定义

  • 数组是同类型的有序的数据集合
  • 数组长度一旦确定就不能改变
  • 数组类型可以是任何类型,包括基本型和引用型

数组的声明

数组的声明有两种方式

type[] arr_name; //(推荐使用这种方式)
type arr_name[];

注意数组声明并没有创建对象,只有在实例化数组时,JVM才会分配空间。所以申明一个数组时,数组并没有被真正的创建,需要指定数组长度。

数组的初始化

静态初始化

直接赋值定义

int[] num = { 1, 2, 3 };// 静态初始化基本类型数组;
Man[] mans = { new Man(1, 1), new Man(2, 2) };// 静态初始化引用类型数组;

动态初始化

声明数组并指定长度后通过下标为数组元素赋值

int[] num = new int[2];//动态初始化数组,先分配空间;
num[0]=1;//给数组元素赋值;
num[1]=2;//给数组元素赋值;

数组默认初始化

数组是引用类型的变量,它的元素相当于实例变量,因此在数组在分配空间时就会默认为元素赋值。int类型默认值为0;布尔类型默认值是false;字符串等引用类型默认值是null

数组遍历

for循环遍历

通过for循环实现数组元素下标递增,实现对数组的遍历。
注意,数组下标是从 0 到 length-1

foreach加强循环遍历

如下:

String[] ss = { "aa", "bbb", "ccc", "ddd" };
        for (String temp : ss) {
            System.out.println(temp);
        }

打印数组

手写打印数组的代码

public static String arrayToString(int[] arr) {
		String result = "";
		result += "[";
		for (int i = 0; i < arr.length; i++) {
			if (i == arr.length - 1) {
				// 如果是最后一个元素,拼接数据
				result += arr[i];
			} else {
				// 如果不是最后一个元素,拼接数据+,_
				result += arr[i] + ", ";
			}
		}
		result += "]";
		return result;
	}

拷贝数组

System类中提供了arrayCopy方法

static void arraycopy(object src,int srcpos,object dest, int destpos,int length)

此方法将数组 src 内从索引 srcpos 开始长度为length 的元素拷贝给数组dest 且下标以destpos 为开始。
此方法不会给数组扩容,需要注意数组下标越界。

java.util.Arrays类

数组操作的几个思想

求和思想

	/*
	 * 功能:求数列中所有数值的和。
	 * 返回值类型: int
	 * 参数列表: int[] arr
	 * 方法名: getSum
	 */
	public static int getSum(int[] arr) {
		
		// 1.定义求和变量
		int sum = 0;
		
		for (int i = 0; i < arr.length; i++) {
			sum += arr[i];
		}
		
		return sum;
	}

最值思想

	/*
	 * 功能: 求出最大值。
	 * 返回值类型: int
	 * 参数列表: int[] arr
	 * 方法名: getMaxValue
	 */
	public static int getMaxValue(int[] arr) {
		// 1.假设第一个数为最大值
		int max = arr[0];
		
		// 2.遍历数组中的每一个元素
		for (int i = 0; i < arr.length; i++) {
			// 获取到每一个元素arr[i]
			// 3.判断获取的元素是否比max大
			if (arr[i] > max) {
				// 4.设置arr[i]为最大值
				max = arr[i];
			}
		}
		
		return max;
	}
	
	/*
	 * 功能: 求出最小值。
	 * 返回值类型: int
	 * 参数列表: int[] arr
	 * 方法名: getMinValue
	 */
	public static int getMinValue(int[] arr) {
		// 1.假设第一个数为最小值
		int min = arr[0];
		
		// 2.遍历数组中的每一个元素
		for (int i = 0; i < arr.length; i++) {
			// 获取到每一个元素arr[i]
			// 3.判断获取的元素是否比min小
			if (arr[i] < min) {
				// 4.设置arr[i]为最小值
				min = arr[i];
			}
		}
		
		return min;
	}

倒置思想

	/*
	 * 功能: 将数组倒置并输出
	 * 返回值类型: void	
	 * 参数列表: int[] arr
	 * 方法名: reverseArray
	 * 
	 * {8,4,2,1,23,344,12} --> {12,344,23,1,2,4,8}
	 * 第一交换
	 * 	第一个数和最后一个数交换位置
	 *  int temp = 0;
	 *  temp = arr[0];
	 *  arr[0] = arr[arr.length - 1 - 0];
	 *  arr[arr.length - 1 - 0] = temp;
	 *  
	 * 第二次交换
	 * 	第二个数和倒数第二个数交换位置
	 * 	int temp = 0;
	 *  temp = arr[1];
	 *  arr[1] = arr[arr.length - 1 - 1];
	 *  arr[arr.length - 1 - 1] = temp;
	 *  
	 * 第三次交换
	 * 	第三个数和倒数第三个数交换位置
	 * 	int temp = 0;
	 *  temp = arr[2];
	 *  arr[2] = arr[arr.length - 1 - 2];
	 *  arr[arr.length - 1 - 2] = temp;
	 *  
	 * 循环体代码:
	 * 	int temp = 0;
	 *  tmep = arr[i];
	 *  arr[i] = arr[arr.length - 1 - i];
	 *  arr[arr.length - 1 - i] = temp;
	 *  
	 * 循环的次数
	 * 7个数  --> 交换3次
	 * 6个数  --> 交换3次
	 * 5个数  --> 交换2次
	 * 4个数  --> 交换2次
	 * i个数  --> 交换i/2次
	 */
	public static void reverseArray(int[] arr) {
		
		for (int i = 0; i < arr.length / 2; i++) {
			int temp = 0;
			temp = arr[i];
			arr[i] = arr[arr.length - 1 - i];
			arr[arr.length - 1 - i] = temp;
		}
		
	}

查找思想

	/*
	 * 数组查找:从键盘中任意输入一个数据,判断数列中是否包含此数。
	 * 返回值类型: boolean
	 * 参数列表: int[] arr, int num
	 * 方法名: isContainsNum
	 */
	public static boolean isContainsNum(int[] arr, int num) {
		// 默认概述在数组中不存在
		boolean flag = false;
		
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] == num) {
				flag = true;
				break;
			}
		}
		
		return flag;
	}
	/*
	 * 数组查找:从键盘中任意输入一个数据,判断数列中是否包含此数。
	 * 返回值类型: int
	 * 参数列表: int[] arr, int num
	 * 方法名: baiscSearch
	 */
	public static int baiscSearch(int[] arr, int num) {
		int index = -1;
		
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] == num) {
				index = i;
				break;
			}
		}
		
		return index;
	}

排序思想(八大排序思想)

冒泡排序

代码实现

public static int[] BubbleSort(int [] arr){
	int temp = 0;	
	for (int x = 0; x < arr.length-1; x++) {
			boolean flag = true;
			for (int n = 0; n < arr.length-x-1; n++) {
				if (arr[n] > arr[n+1]) {
					temp = arr[n+1];
					arr[n+1] = arr[n];
					arr[n] = temp;
					flag = false;
				}
			}
			if (flag) {
				break;
			}
		}
		return arr;
 }

选择排序

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值