纲要:
![](https://img.haomeiwen.com/i16398174/18bd9459f6c1ece9.png)
一、可变参数:参数的个数不确定,可以是0个可以是多个,参数的数据类型必须相同
可变参数必须要写在参数列表的最后:(... ,数据类型 ... 参数名-->可变参数)
操作可变参数,要通过使用数组的方式,编译器会隐式的在内部为我们构建一个数组,存储可变参数的值
二、数组排序与查询
1. 数组:
例如数组int[] arr={9,10,5,7,4}
1.1冒泡排序: 没两个数之间进行比较,找到一个最小的或者最大的进行交换,把它放在这一轮的最后一个位置
i=1~arr.length-1 两个数中的第一个j的变化范围
第一轮: 9,5,7,4,10 [0,arr.length-1) 能确定一个最大值,放在最后,下一轮不用比较
第二轮: 5,7,4,9 [0,arr.length-2)
第三轮: 5,4,7 [0,arr.length-3)
第四轮: 4,5 [0,arr.length-4)
//外层循环控制比较轮数 1~arr.length-1 比如5个数,比较4轮
for(int i=1;i<=arr.length-1;i++){
//内层循环的变量控制i
/没两个数比较的第一个数的索引j 和 j+1 j的范围:0 ~ arr.length-i-1
for(int j=0;j<arr.length-i;j++){
if(arr[j]<arr[j+1]){
int temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
}
}
1.2 选择排序:拿主场数和后面的每一个位置的数据比较大小,确保这一轮结束后,主场位置存放的是这一轮中的最大或最小者
轮数 i 1~arr.length-1 主场数的索引 i 与主场数比较的数的范围:
0 第一轮: 1,9,5,7,4 ,18 0 [i+1,arr.length-1]
1 第二轮: 3,5,7,4 ,8 1
2 第三轮: 7,5,4 ,8 2
3 第一轮: 5,4 3
int max=0; //记录每一轮中最大数据的索引
for(int i=0;i<arr.length-1;i++){
max=i;
//与主场数比较的数的范围 m
for(int m=i+1;m<=arr.length-1;m++){
if(arr[max]>arr[m]){
max=m;
}
}
//max 最大数的位置
if(max!=i){
int temp=arr[i];
arr[i]=arr[max];
arr[max]=temp;
}
}
1.3二分法查找
数组已经升序排序
查找数组中指定的数据,找到返回它的索引,没有找到返回-1
int min=0;
int max=arr.length-1;
int mid=(min+max)/2;
while(i!=arr[mid]){
if(i>arr[mid]){
min=mid+1;
}else if(i<arr[mid]){
max=mid-1;
}
if(max<min){
return -1;
}
mid=(min+max)/2;
}
三、Arrays工具类(了解)
Arrays 工具类
static boolean equals(int[] a, int[] a2) 如果两个指定的 int 型数组彼此相等,则返回 true。
static String toString(int[] a) 返回指定数组内容的字符串表示形式。
static void sort(int[] a) 对指定的 int 型数组按数字升序进行排序。
static void sort(int[] a, int fromIndex, int toIndex) 对指定 int 型数组的指定范围按数字升序进行排序。
static void fill(int[] a, int val) 将指定的 int 值分配给指定 int 型数组的每个元素。
static int binarySearch(int[] a, int key) 使用二分搜索法来搜索指定的 int 型数组,以获得指定的值。
static int[] copyOf(int[] original, int newLength)
static int[] copyOfRange(int[] original, int from, int to) 将指定数组的指定范围复制到一个新数组。
static boolean deepEquals(Object[] a1, Object[] a2) 如果两个指定数组彼此是深层相等 的,则返回 true。
static String deepToString(Object[] a) 返回指定数组“深层内容”的字符串表示形式
四、 面向对象
1.面向对象和面向过程区别:
都是一种思维方式,是一种思想
面向过程:"我应该怎么去做?" 然后一步一步去实现
面向对象:"我应该让谁来做?" 不关注具体如何实现,关注的是对象
2.面向对象的优点:
1.更贴近于现实生活
2.面向对象可以将复杂的问题简单化
3.面向对象贴近管理者的角度,面向过程体现于执行者
3.如何使用面向对象的思维方式进行编程:
想要程序和现实生活挂上关系,所以提供的两个概念,类 对象
类:现实生活中一系列事物的模板
对象:具体的某个事物
4.自定义类|模板类|javabean
1)手机能做什么??? 打电话,上网,发短息,刷抖音... 动词 ---功能 成员方法
2)手机的特征??? 颜色 价钱 品牌 尺寸... 名词 ---属性 成员变量
事物:属性 功能
public class 类名{
//成员变量
修饰符 数据类型 变量名=赋值;
//成员方法
修饰符 返回值类型 方法名([参数]){
方法体
}
}
5.使用引用数据类型:
5.1.导包 1)java.lang包下的内容 2)同包下的类不需要导包
5.2.创建类型的引用
数据类型 引用名|变量名 = new 数据类型(); --创建一个对象,new是用来创建对象的
5.3.使用功能|属性
引用.功能名字()|属性名字
网友评论