Java学习笔记——2021.11.25
数据结构:
- 数据与数据之间的逻辑关系:集合、一对一、一对多、多对多;
- 数据的存储结构:
线性表:顺序表(比如:数组)、链表、栈、队列;
树形结构:二叉树;
图形结构:
算法:排序算法、搜索算法
数组中常见的算法
- 数组元素的赋值(杨辉三角、回形数等)
- 求数值型数组中元素的最大值、最小值、平均数、总和等
- 数组的复制、反转、查找(线性查找、二分查找)
直接令一个数组等于另一个数组,没有生成新的数组,只是把另一个数组的地址赋给了该数组,修改另一个数组,该数组的元素也会发生改变,相当于另一个数组的快捷方式。
要复制数组应该每个元素一个一个赋值。
反转:
方法1:
for(int i = 0; i < array.length / 2; i++){
String temp = array[i];
array[i] = array[array.length - i - 1];
array[array.length - i - 1] = temp;
}
方法2:
for(int i = 0,j = array.length; i < j ; i++, j--){
String temp = array[i];
array[i] = array[j];
array[j] = temp;
}
查找:
线性查找:遍历查找
String dest = 目标;
for(int i = 0;i < array.length; i++){
if(dest.equals(array[i])){
break;
}
}
二分查找:前提数组有序
int dest = 目标;
int head = 0;
int end = array.length - 1;
while(head <= end){
int middle = (head + end) / 2;
if(dest == array[middle]){
break;
}else if(dest < array[middle]){
end = middle - 1;
}else{
head = middle + 1;
}
}
- 数组元素的排序算法
排序的目的是快速查找
衡量排序算法的优劣:
– 时间复杂度:分析关键字的比较次数和记录的移动次数;
– 空间复杂度:分析排序算法中需要多少辅助内存;
– 稳定性:若两个记录A和B的关键字值相等,但A、B的先后次序保持不变,则称这种排序算法是稳定的。即两个相同的元素,排序之后,先后顺序一致。
- 十大内部排序算法:
– 选择排序:直接选择排序、堆排序;
– 交换排序:冒泡排序、快速排序;(会手写)
– 插入排序:直接插入排序、折半插入排序、Shell排序;
– 归并排序
– 桶式排序
– 基数排序 - 算法的五大特征
冒泡排序:
(基本思想:通过对待排序序列从前往后,依次比较相邻元素的排序码,若发现逆序,则交换,使排序码较大的元素逐渐从前部移向后部。
因为在排序过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志swap判断元素是否进行过交换。从而减少不必要的比较。)
int[] arr = new int[]{45,78,56,23,15,-95,0,45};
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;
}
}
}
- 排序算法的性能对比
Arrays工具类的使用
数组中常见的异常
- 数组角标越界的异常:ArrayIndexOutOfBoundsException
- 空指针异常:NullPointerException
其他补充知识
生成一个0-1之间的随机数Math.random()