一、数组
1、二维数组
(1)理解:可以将其看作一维数组的嵌套使用,将线性图形变成平面表格似的东西。
>其实,从数组底层的运行机制来看,其实没有多维数组
(2)声明和初始化
①静态初始化:数组变量的赋值与数组元素的赋值操作同时进行
int[ ][ ] arr1 = new int[ ][ ]{{1,2,3,4},{5,6},{7,8,9}};(内外层元素任意输入设定)
②动态初始化:数组变量的赋值与数组元素的赋值操作分开进行
方式1:string[ ][ ] arr2 = new string[3][4];(外层3个元素,内层4个元素。均已固定)
方式2:double[ ][ ] arr3 = new double[2][ ];(外层确定,内层未确定,调用时可灵活输入元素)
注:其他正确写法
int arr4[ ][ ] = new int[ ][ ]{{1,2,3,4},{5,6},{7,8,9}};
int[ ] arr5[ ] = new int[ ][ ]{{1,2,3,4},{5,6},{7,8,9}};
int arr6[ ][ ] = {{1,2,3,4},{5,6},{7,8,9}}; //类型推断
string arr7[ ][ ] =new string {{1,2,3,4},{5,6},{7,8,9}};
除了列出的正确的都是错的,如 int[ ][ ] arr1 = new int[ ][3]{{1,2,3},{4,5,6},{7,8,9}};
(3)数组元素的调用
针对arr1来说,外层元素{1,2,3,4},{5,6},{7,8,9} 内层元素1,2,3,4,5,6,7,8,9
①调用内层元素
system.out.println(arr1[0][0]);//输出1
system.out.println(arr1[2][1]);//输出8
②调用外层元素
system.out.println(arr1[0]);//输出{1,2,3}的地址
③测试arr2,arr3
arr2[0][1] = "Tom";
system.out.println(arr2[0][1]);//仅输出Tom
system.out.println(arr2[0]);//输出地址值
arr3[0] = new double[4];
arr3[0][0] = 1.0;//赋值
(4)数组的长度
system.out.println(arr1.length);//3
system.out.println(arr1[0].length);//4
system.out.println(arr1[1].length);//2
system.out.println(arr1[2].length);//3
(5)如何遍历数组
二、排序
衡量排序算法的优劣:
Ⅰ.时间复杂度:分析关键字的比较次数和记录的移动次数
Ⅱ.空间复杂度:分析排序算法中需要多少辅助内存
> 一个算法的空间复杂度S(n)定义为该算法所消耗的存储空间,它也是问题规模n的函数
Ⅲ.稳定性:若两个记录A和B的关键字值相等,但排序后A、B的先后次序保持不变,则称这种排序算法是最稳定的
1、冒泡排序(最简单,时间复杂度:O(n^2))
①比较相邻的元素,如果第一个比第二个大(升序),则交换位置
②对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
③针对所有的元素重复以上的步骤,除了最后一个,直到排序完成。
2、快速排序(最快的,时间复杂度O(nlog(n)))
①从数列中挑出一个元素,称为 “基准”(pivot);
②重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
③递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
④递归的最底部情形,是数列的大小时零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会结束,因为再每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。
三、面向对象
1、 三大主线
>Java类及类的成员:(重点)属性、方法、构造器;(熟悉)代码块、内部类
>面向对象的特征:封装、继承、多态(、抽象)
>其他关键字的使用:this、super、package、import、static、final、interface、abstract等
2、面向对象的程序运行
四、类的成员
类和对象概述
①类:具有相同特征的事物的抽象描述,是抽象的、概念上的定义。
②对象:实际存在的该类事物的每个个体,是具体的,因而也称为实例 (instance)。