数组
多个相同类型的数据
1.一维数组,二维数组
2.基本数据类型,引用数据类型
① 声明
静态初始化
1.int[] ids;
2.int ids[];
ids = new int[]{100,1002,11001}; 直接在后面跟花括号,进行数组元素的赋值
动态初始化
String[] names = new String[5];初始化和赋值分开进行
一开始就要确定长度
② 通过角标调用指定位置的元素
names[0] = “xxx”;
没有定义的话,字符串数组里面都是null
③ 长度和遍历
ids.length
for遍历,name[i]
二维数组
1.int[][] arr = new int[][]{{1,2},{2,3,4},{5,7,8}};
2.int[] arr[] = …
3.int arr[][]
外层:打印arr1[0],出现的是地址值
如果直接打印一个数组(有设长度),出现的都是首元素地址值
内层:看数据类型
int[][] arr2 = new int[4][];
外层初始化:null
内层:空指针异常
如果里层元素没定义多长,打出来不管什么数据类型都是null。因为引用类型的默认值都是null。
常见算法
1、杨辉三角、回形数
2、最大最小平均总和
3、复制反转查找(顺序,二分)
4、排序
i–好用
while(true)
用continue来继续while循环
alt/提示
3.数组的复制
array2 =array1 两个变量的地址值是一样的,指向了唯一的数组实体
赋值的话必须类型匹配,或者强转
判断相等:int的话直接用==, String用方法 str.equals()
二分法前提:数组有序从小到大排
结束条件:start<=end
4.排序算法
排序的目的:快速查找
指标:
时间复杂度
空间复杂度
稳定性
分类:内部/外部排序,靠不靠外部存储器,比如磁盘
算法的特征(5):输入,输出,有限性(时间),确定性(没有歧义),可行性
不确定算法:并行,概率算法
(1)冒泡排序
需要N-1趟;第1个到第n个,对相邻数字进行判断然后改正顺序。
然后第1个到第n-1个,直到1-2个交换。
(2)快速排序
O(nlogn) 最快
把第一个数字左边都换成比它小的,右边都换成比它大的,但是无序。
low>high结束
然后左边右边两个无序数组继续换,最后得到结果。
Arrays工具类
现成结构可以调
Arrays.equals(a,b) 返回boolean
Arrays.toString(a) 输出数组信息 没有返回值
Arrays.fill(arr,a) 把原来数组的每一个元素都替换掉变成所给参数 没有返回值
Arrays.sort(arr) 没有返回值
Arrays.binarySearch(arr,key) 返回index,找不到返回负值
面向对象
类的成员:属性,方法,构造器;代码块,内部类
继承,封装,多态,抽象
其他关键字
对象=实例
class ClaDemo{
public void eat(String eating){
}
}
然后在main中new一个
属性:在括号内
局部变量:在方法内,形参…;没有默认初始化值
返回值:
public void没有返回值;return;来结束方法
public String 返回字符串;return 关键字返回指定类型的数据
权限修饰符:
public private protected 缺省
修饰方法:
static final abstract
取随机数
Math.random()返回的是double
(int)Math.random()取值范围[0,1)
Math.random()*(n-m)+m
随机生成a~z之间的字符
(char)(‘a’+Math.random()*(‘z’-‘a’+1));
Random ran = new Random();
ran.nextInt(n);//[0,n)
四舍五入取整
Math.round(double d) 返回值long
Student[] ss = new Student[20];
for(int i=0;i<20;i++){
ss[i] = new Student();
ss[i].number = i+1;//学号1-20
ss[i].score = (int)Math.round(100Math.random());
ss[i].state = (int)(3Math.random()+1);
}