c++ string数组怎么赋值_java数组及其相关操作_2019_04_16

5de70c10f710325e71717972e13c2981.png

1.数组定义

  • 数组是一种数据结构,是用来存储同一数据类型的有序集合,并可以用下标索引访问数组中的值。简而言之就是开辟了一段连续的有具有索引的存储单元。
  • 唯一性:不可以存储不同的数据类型。
  • 快速访问:可以通过下标 索引符号[ ] 快速访问数据。
  • 客户端程序员未赋值,JVM会自动赋值(int自动赋值0,boolean自动赋值false,引用类型自动赋值null)
  • 可以int [] a定义数组,也可以int a []定义数组 前者更符合java设计思想 后者是C程序员的习惯。

2.foreach 循环

for each只读取容器内的数据而不会更改数据。

for(variable : collection) 语句块,collection 这一集合表达式必须是一个数组或者是一个实现了 Iterable 接口的类对象 《java核心技术 | 》

3.数组初始化

  1. int [] a={1,2,3,4,5,6,7,8,9};
  2. int [] a =new int[9];
  3. int [] a =new int[]{1,2,3,4,5,6,7,8,9};
  4. new int {1,2,3,4,5,6,7,8,9,};//匿名初始化 《java核心技术 | 》
  5. small Primes = new int[] { 17, 19, 23, 29, 31, 37 }; 是 int [] anonymous = { 17, 19, 23, 29, 31, 37 };

smallPrimes = anonymous; 的简写形式- 《java核心技术 | 》

6.数组的引用本质其实就是指针(c/c++)

当我们定义两个数组 int a1[]={1,2,3,4,5,6,7,8,9};

int b1[]={1,2,3,} //故意长度不相等

e0b96bfff54d025f803db14da23164fd.png

很明显a这时候报了数组越界异常,这时候变量a指向了b1。(下图虚线 是赋值语句的结果,a指向b1)

2da2363c3d9d329d01cd21ff41a2b28c.png

4.数组在内存中存储形式

4.1 基本数据类型数组

int [] a =new int[9];为例子,在栈内存(stack)存放内存开辟空间用来存放变量a它是内数组的应用并指向数组第一个地址 ,在堆(heap)开辟一段连续的内存空间 且空间长度是int*9用于存放这九个int数据。

edf9d16e1e9d5cdb111df0e365f19bf1.png

4.2 引用类型数据

当创建数组对象时,实际上是创建的引用数组,并且数组内的每个存储单元存储的是数组的引用对象的地址并自动赋初始值关键字null在使用引用前必须指定他的对象。

5.常用算法

5.1插入算法

public class Add{
	public static void main(String[] args){
		
		// 一个有序的数组,向该数组中添加一个元素,数组依然有序。
		int[] arr = {1,3,7,9,12,20,0};
		int t = 0;
		
		// 【1】找位置
		int loc = -1; // 表示t应该添加到的位置
		for(int i = 0;i<arr.length-1;i++){
			if(arr[i] >= t){
				loc = i;
				break;
			}
		}
		
		System.out.println("loc = "+loc);
		
		if(loc < 0){ // 没找到合适的位置
			arr[arr.length-1] = t;
		}else{
			// 【2】依次后移
			for(int j=arr.length-1;j>loc;j--){
				arr[j] = arr[j-1];
			}
			// 【3】添加插入的值
			arr[loc] = t;
		}
		
		// 验证
		for(int i = 0;i<arr.length;i++){
			System.out.print(arr[i]+"t");
		}
	}
}

5.2 删除算法

public class Delete{
	public static void main(String[] args){
		// 删除算法
		int[] arr = {1,3,7,9,12,20};
		int t = 1;
		// 【1】找位置
		int loc = -1;
		for(int i=0;i<arr.length;i++){
			if(t == arr[i]){
				loc = i;
				break;
			}
		}
		// 【2】移动元素
		if(loc < 0){
			System.out.println(t+"在数组中不存在");
		}else{
			for(int j = loc;j<arr.length-1;j++){
				arr[j] = arr[j+1];
			}
			// 【3】最后一个元素置0
			arr[arr.length-1] = 0;
		}
		// 验证
		for(int i = 0;i<arr.length;i++){
			System.out.print(arr[i]+"t");
		}
	}
}

5.3冒泡排序

public class Bubble{
	public static void main(String[] args){
		// 对一个无序的数组进行排序
		int[] arr = {10,5,3,4,2,9,7};
		int tmp = 0;
		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]){
					tmp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = tmp;
				}
			}
		}
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+"t");
		}
	}
}
  • 最特殊的情况就是数组全部逆序那么这时每一趟的每一次比较都需要执行 ,又因两个for循环所以时间复杂度是O(
    equation?tex=n%5E%7B2%7D ).
  • 最好的情况就是这个数组是升序排列内层循环if不执行,且执行完n-1趟算法执行完毕所以时间复杂度O(n)
  • 综合所述这个算法的平均时间复杂度是O(
    equation?tex=n%5E%7B2%7D

-----------------------------------2019_04_17更新------------------------------------------

  • 更新了4.2内容

-----------------------------------会持续更新并完善文章内容--------------------------------

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值