java数组知识点总结

·

数组知识点总结

1.数据结构

数组 栈 链表 散列 二叉树/红黑数

2.数组特性

多个相同数据的储存容器,可以同一管理,是引用数据类型
占两块空间,栈内存变量保存堆内存对象的引用

3.数组声明 3种

1.静态声明:

数组类型[] 变量 = {值,值,值};

2.动态声明:

数组类型[] 变量 = new 数组类型[长度];
整数:0 浮点数:0.0 char:\u0000 boolean:false 引用类型:null

3.数组传递,静态声明

数据类型[] 变量 = new 数据类型[]{值,值,值};

4.获取数据(查)

长度 arr.length 索引/下标index arr[i] 尾元素arr[length-1]

5.设置数据(改)

数组[1]=1;

6.遍历

for(){
sysout(arr[i]);
}
增强for循环:把arr数组元素依次取出并赋值给i
for(int i:arr){
sysout(i);
}

一维数组美观友好输出方法:

public static void printArray(int[] arr) {
	 System.out.print("{");
        for (int i=0;i<= arr.length-1;i++){
            if (i == arr.length-1){
                System.out.print(arr[i]);
            }else {
                System.out.print(arr[i]+",");
            }
        }
        System.out.println("}");
}

二维数组美观友好输出方法:

public static void printArray2(int[][] arr) {
	System.out.print("{");
    for(int i=0;i<arr.length;i++) {
    	System.out.print("{");
    	for(int j=0;j<arr[i].length;j++) {
    		if(j == arr[i].length-1) {
    			System.out.print(arr[i][j]);
    		}else {
    		System.out.print(arr[i][j]+",");
    		}
    	}
    	System.out.print("}");
    	if(i!=arr.length-1) {
    		System.out.print(",");
    	}
    }
    System.out.print("}");
}

7.常见异常

1.下标越界异常
2.空指针异常

8.数组传递 搞清楚 成员变量、局部变量、引用、堆内存

传值
传引用

9.数组复制

System.arraycopy();进行数组替换式复制
src:源数组 srcpos:源起始位 dest:目标数组 destpos:目标起始 length:长度

10.API

System.arraycopy();
Arrays.sort();数组升序

11.二维数组 (难点)

注:首先需要动态初始化一维数组,才能赋值
否则报错-空指针异常

int[][] arr = {{},{},{}…};
int[][] arr = new int[3][2]; 有3个一维数组,每个一维数组3个
int[][] arr = new int[3][];

11.1获取第一个一维数组

int[] arr0 = arr[0] //arr二维数组 arr0 二维中的一维
int arr00 = arr0[0]; //arr00 一维中的第一位
在这里插入图片描述

12.Scanner 用户交互输入

Scanner sc = new Scanner(System.in);
int a = sc.nextInt();

12.1字符sc.next();分隔符是空格,1 2 3 只接收1
sc.nextLine();接收一行数据,没有分隔符
12.2整型sc.nextInt( ); 接收整数,纯数字
12.3小数sc.nextDouble(); 同上,只能有一个小数点

13.排序 (难点)

13.1交换变量的值

1.中间变量 (实用)
int temp = x;
x = y;
y = temp;
2.位移运算 (面试)相同取0,不同取1
x = x^y; ^异或
y = x^y;
x = x^y;
3.加减运算 (少见)
x=x+y;
y=x-y;
x=x-y;

13.2冒泡排序(冒泡排序相比选择排序,少比较一轮)

1.比较相邻两元素,第一个大于第二个交换位置
2.每一对相邻重复以上,最后一位最大
3.再重复以上,除了最后一个元素(比较次数递减)
4.一直到没有任何一对元素,终止
-嵌套循环
外层循环决定比较多少轮
内存循环决定每轮比较多少次
在这里插入图片描述

13.3选择排序

1.每次把最小放到左边
先拿出第一个,假设最小,挨个和后面所有比较,找到最小的放最前
在这里插入图片描述
13.4数组升序
Arrays.sort();数组升序

13.5二分法查找
1.必须建立在已排序的基础上
2.一般没有重复的数据,如果有 只能是找到谁算谁
3.一般用于查找固定的有序的数据,因为二分法不利于添加和删除操作,因为还需要保持元素有序

public static int binarySearch(int[] arr, int target) {
		// 1 确定起始索引,结束索引,中间索引
		int startIndex = 0;
		int endIndex = arr.length;
		int m = (startIndex + endIndex) / 2;
		// 2 使用目标数据和中间数据进行比较
		// 终止条件 : 不存在该数据,当起始值大于中间数据时,说明不存在,可以相等,相等说明还有一个数据没有比较
		while (startIndex <= endIndex) {
			// 3 第一种 : 中间值就是目标数据,直接返回中间索引 m 即可
			if (arr[m] == target) {
				return m;
			}
			// 4 第二种 : 中间值小于目标数据,结束值不变,起始值=中间值+1
			if (arr[m]<target) {
				startIndex=m+1;
			}
			// 5 第三种 : 中间值大于目标数据,起始值不变,结束值=中间值-1
			if (arr[m]>target) {
				endIndex=m-1;
			}
			// 重新生成中间值
			m = (startIndex + endIndex) / 2;
		}
		// 能执行到这里
		// 说明不存在该数据,当起始值大于中间数据时,说明不存在,可以相等,相等说明还有一个数据没有比较
		return -1;
	}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值