数组的相关基础知识

一、数组的说明及初始化

1.含义

存储多个数据的集合

2.相关概念:

元素:数组里的数据

下标/索引:每个数据对应的编号,从0开始

3.初始化
静态初始化:

初始化数组时,元素由程序员指定,长度由系统根据元素个数开辟内存空间

动态初始化:

初始化数组时,长度有程序员指定,元素由系统根据元素类型默认初始化数据

​ 整数类型:0
​ 浮点类型:0.0
​ 字符类型:’ ’
​ 布尔类型:false
​ 引用类型:null - 空

注意:

1.不管数组里存的是什么类型,数组都是引用数据类型

2.数组一旦初始化后,数组在内存中开辟的空间就决定了(数组长度不能改变-不能扩容、不能删除)

3.下标超出了界限,会报数组下标越界异常 - ArrayIndexOutOfBoundsException

4.names叫做引用,该引用存的是数组在堆内存中开辟空间的地址

5.new关键字指的是在堆内存中开辟空间

静态初始化 vs 动态初始化

​ 静态初始化:一开始就知道数据
​ 动态初始化:一开始不知道数据,只知道长度

静态初始化1:

//String[] names = new String[]{"小明","小红","阿华","阿花","小黄"};

静态初始化2:先声明,再初始化

String[] names;
names = new String[]{"小明","小红","阿华","阿花","小黄"};

静态初始化3:

String[] names = {"小明","小红","阿华","阿花","小黄"};

静态初始化案例:

		String[] names = {"小明","小红","阿华","阿花","小黄"};
		//设置指定下标上的元素
		names[2] = "阿豪";
		//获取指定下标上的元素
		System.out.println(names[2]);
		System.out.println("获取数组元素的个数:" + names.length);//5
		System.out.println("-----------------");
		//遍历 - for循环
		for(int i = 0;i<names.length;i++){
			System.out.println(names[i]);
		}
		System.out.println("-----------------");
		//遍历 - 增强for循环 foreach
		for(String str : names){//循环,依次取出数组中的元素,并赋值给str变量
			System.out.println(str);
		}
		/**
			for vs foreach
			
			如果要是用到下标,就是用for循环
			如果不用到下标,就是用foreach
		*/
	}

数组求和,取最大值的案例实现:

int[] is = new int[]{1,2,3,4,5,6,7,8,9};
		int max = is[0];
		int sum = max;
		for(int i = 1;i<is.length;i++){
			if(max < is[i]){
				max = is[i];
			}
			sum += is[i];
		}
		System.out.println("最大值为:" + max);
		System.out.println("总和为:" + sum);
	}

动态初始化1

String[] names = new String[5];//5-代表长度

动态初始化2

String[] names;
names = new String[5];//5-代表长度

动态初始化案例:

String[] names;
names = new String[5];//5-代表长度
		//设置指定下标上的元素
		names[0] = "啊亮";
		names[1] = "啊洲";
		names[2] = "阿豪";
		names[3] = "啊江";
		names[4] = "啊军";
		//获取指定下标上的元素
		System.out.println(names[2]);
		System.out.println("获取数组元素的个数:" + names.length);//5
		System.out.println("-----------------");
		//遍历 - for循环
		for(int i = 0;i<names.length;i++){
			System.out.println(names[i]);
		}
		System.out.println("-----------------");
		//遍历 - 增强for循环 foreach
		for(String str : names){//循环,依次取出数组中的元素,并赋值给str变量
			System.out.println(str);
		}

二、数组的排序

1.冒泡排序

代码实现:

int[] is = {8,21,15,81,69,4};
		//冒泡排序部分
		for(int i = 0;i<is.length-1;i++){
			for(int j = 0;j<is.length-1-i;j++){
				if(is[j] > is[j+1]){
					int temp = is[j];
					is[j] = is[j+1];
					is[j+1] = temp;
				}
			}
		}
		//打印输出
		for(int num:is){
			System.out.println(num);
		}
2.Arrays.sort()导包排序

三、数组的查找

1.顺序查找

案例:

int[] is = {8,21,15,81,69,4};
		int num = 21;
for(int i = 0;i<is.length;i++){
					if(is[i] == num){
						System.out.println("找到该数值了");
						break;
					}
				}
2.二分法查找

注意:使用二分法的前提是必须排序

案例代码:

int[] is = {8,21,15,81,69,4};
		int num = 85;
		Arrays.sort(is);//排序: 4 8 15 21 69 81
		int start = 0;
		int end = is.length-1;
		while(start <= end){
			int mid = (start + end)/2;
			if(is[mid] < num){
				start = mid+1;
			}else if(is[mid] > num){
				end = mid-1;
			}else{
				System.out.println("找到该数值了");
				break;
			}	
		}

四、数组的复制

方法1.

	String[] ss1 = {"啊希","啊空","啊玲"};
		String[] ss2 = ss1;
		ss1[1] = "阿豪";
		for(String name : ss2){
			System.out.println(name);
		}	

可以看到,在重新给ss1数组赋值后,输出的ss2数组也发生了改变,影响了ss2,故复制数组一般不用此方法。

方法2:

String[] ss1 = {"小李","小杨","小玲"};
String[] ss2 = new String[ss1.length];
		for(int i = 0;i<ss1.length;i++){
			ss2[i] = ss1[i];
		}
		ss1[1] = "阿豪";
		for(String name : ss2){
			System.out.println(name);
		}

运行该案例后,可以看到,ss1数组的赋值,并不会影响复制后的ss2数组。

五、数组的扩容

扩容代码实现:

String[] ss1 = {"麻生","椎名","北岛"};
		//null null null null null null
		String[] ss2 = new String[ss1.length*2];//原来数组长度的两倍
		//数据的复制
		//"麻生"	"椎名"	"北岛" null null null
		for(int i = 0;i<ss1.length;i++){
			ss2[i] = ss1[i];
		}
	   //引用赋值
		ss1 = ss2;
		for(String name:ss1){
			System.out.println(name);
		}

扩容后,由于该案例扩容了2倍,后面的3位内存中值位null。

六、数组的删除

案例,删除数组的阿伟

String[] ss1 = {"阿豪","阿伟","麻生","椎名","北岛"};
		
		String[] ss2 = new String[ss1.length-1];
		
		int index = 0;
		for(String name:ss1){
			if(!name.equals("阿伟")){
				ss2[index++] = name;
			}
		}
		
		ss1 = ss2;
			
		for(String name : ss1){
			System.out.println(name);
		}

方法2实现代码如下:

String[] ss1 = {"阿豪","阿伟","麻生","椎名","北岛"};
		for(int i = 1;i<ss1.length-1;i++){
			ss1[i] = ss1[i+1];
		}
		ss1[ss1.length-1] = null;
		for(String name : ss1){
			System.out.println(name);
		}
	}
}

删除时,将要删除的数组数据删除后,直接将后面的所有代码前移,故删除一个后,最后一个内存用null补位。

七、数组参数和返回值

数组的参数示例

public static void method1(int[] is){
	}

数组的返回值

代码示例

public static int[] method02(){
		int[] is = {1,2,3};
		return is;
	} 

八、可变参数

注意:

可变参数的本质是数组

可变参数后不能加其他参数

应用示例:
public static void main(String[] args){
	int num = add(1,2,3,4,5,6,7,8,9);//把数据压入到数组中
		System.out.println(num);
	}
public static int add(int... is){//int... is --> 可变参数
		int sum = 0;
		for(int i = 0;i<is.length;i++){
			sum += is[i];
		}
		return sum;
	}

九、main参数的问题

public static void main(String[] args){
    for(String str : args){
			System.out.println(str);
		}
	}

该代码没有输出结果

但是在运行时 java Test13 小红 小绿 小黄
把这3个字符串压入到args的数组中

可以在运行结果中看到输出了3个输入的字符串

十、Arrays工具类

Arrays工具类:操作数组的类

工具类:该类里的方法都是静态的,直接用类名调用

int[] is = {8,21,15,81,69,4};
		//排序
		Arrays.sort(is);
		//Arrays.sort(is,1,4);//(目标数组,开始下标-包含,结束下标-不包含)
		//查找(查找之前一定要排序)
		//返回值:搜索键的索引,如果它包含在数组中; 否则, (-(插入点) - 1) 。 
		int index = Arrays.binarySearch(is,20);
		System.out.println("下标为:" + index);
		//替换
		Arrays.fill(is,888);
		Arrays.fill(is,1,4,666);//(目标数组,开始下标-包含,结束下标-不包含,替换的数据)
		//把数组转换为字符串
		System.out.println(Arrays.toString(is));
		//拷贝数组(目标数组,新的长度)
		int[] newIs1 = Arrays.copyOf(is,10);
		System.out.println(Arrays.toString(newIs1));
		//拷贝数组(目标数组,开始下标-包含,结束下标-不包含)
		int[] newIs2 = Arrays.copyOfRange(is,1,4);
		System.out.println(Arrays.toString(newIs2));
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NumPy是Python中用于科学计算的重要库之一,它提供了高效的多维数组对象ndarray,以及对数组进行快速操作的函数和方法。在NumPy中,数组的计算是基于元素的,也就是说,对数组中的每个元素进行操作。 下面介绍一些NumPy数组计算的基础知识: 1. 创建数组 使用numpy.array()函数可以创建一维或多维数组,例如: ``` python import numpy as np a = np.array([1, 2, 3]) # 创建一维数组 b = np.array([[1, 2], [3, 4]]) # 创建二维数组 ``` 2. 数组操作 数组的操作包括索引、切片、形状操作等。例如: ``` python c = b[1, :] # 取二维数组b的第二行 d = b[:, 1] # 取二维数组b的第二列 e = b.reshape(1, 4) # 将二维数组b转化为一维数组 ``` 3. 数组计算 NumPy支持数组与标量、数组之间的加减乘除等基本计算操作,并且进行这些操作时遵循广播规则,例如: ``` python f = a + 1 # 数组a中的每个元素都加1 g = a * b # 数组a与二维数组b的每个元素相乘 ``` 4. 数学函数 NumPy中还提供了许多数学函数,例如求和、平均值、标准差、方差等,这些函数都可以对数组进行操作,例如: ``` python h = np.sum(a) # 计算数组a的和 i = np.mean(b) # 计算二维数组b的平均值 j = np.std(a) # 计算数组a的标准差 k = np.var(b) # 计算二维数组b的方差 ``` 这些都是NumPy数组计算的基础知识,掌握了这些知识之后,可以更加高效地进行科学计算。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值