一、数组:
1、好处:可以将多个相同类型的数据存储在一起
2、概念:
。数组是存储同一种数据类型多个元素的集合,也可以看成一个容器
。数组可以存储基本数据类型,也可以存储引用数据类型
。数组是java中的唯一底层容器。
。数组中只能存放固定类型的数据
。数组中只能存放固定个数的数据
3、new 数据类型【个数】
4、动态初始化:
先确定数组存放数据的类型和长度
int [] arr = new int [4]
静态初始化:
先确定数组的内容,动态的计算出数组的类型和长度
int【】arr = {1,2,3,4,4};
5、注意:
①数组中存放的是当前类型的默认值
②静态初始化时,具体的数组类型,由变量类型控制
6、具体如何使用?
。使用数组的角标对数组进行操作,我们可以将数组的一个角标位看作一个变量
。获取数组的某个角标位:arr[角标值]
·获取数组中的某个角标后,就可以获取值和赋值了
。获取数组的长度(元素的个数):arr.length
.元素:值得是数组中存入的值。
7、数组默认值:
整数型 : byte short int long 默认初始化值都是0
浮点型 : float double 默认初始化值都是0.0
布尔型 : boolean 默认初始化值是false
字符型 : char 默认初始化值是 '\u0000' 十六进制的
引用数据类型 : 所有引用数据类型的初始化值都是null
二、数组的基本操作
1、遍历数组
。循环查看数组中的每一个元素
public static void print(int[] arr){
for (int i = 0 ;i <arr.length ; i++){
System.out.println(arr[i] + " ");
}
}
2、获取数组中的最大值
。遍历数组,查找最大的值。注意,这个最大值是数组中的,所以我们不能随便给最大值
变量赋一个默认值。
public static void getMax(int[] arr){
//定义存储最大值的变量
int max = arr[0];
for(int i = 1 ; i< arr.length; i++){
for(arr[i]>max){
max = arr[i];
}
}
return max ;
}
3、反转数组
。将数组中的元素按照排序顺序反转,例如角标0和最后一个祭敖包上的元素交换
public static void reverse(int [] arr){
//数组中的元素前后交换,遍历的次数只能是数组长度的一半。
for(int i=0 ; i<arr.length/2 ; i++){
int temp =arr[i];
arr[i] = arr[arr.length-i-1];
arr[arr.length-i-1] = temp;
}
}
4、查找数组中某个值第一次出现的位置
。对比数组中的每个元素,直到匹配成功,返回当前的角标,如果没有查到,返回一个负数
public static int indexOf(int[] arr , int value ){
for(int i = 0 ; i<arr.length/2 ; i+=){
if(arr[i]==value){
return i;
}
}
return -1 ;
}
三、二分查找
1、定义:
。使用折半的形式,一次性剔除一半的无效元素,提高了查找的效率
。使用二分查找的数组必须是有序的
public class TestDemo{
public static void main(String[] args){
}
public static int binSerach(int [] arr ,int value){
//数组中的元素必须是有序的
//定义有效元素开始的角标
int start =0 ;
//定义有效元素结束的角标
int end =arr.length-1 ;
//定义中间的比较值
int mid ;
//当有效范围的开始角标已经大于结束角标了,说明已经没有有效元素了
while(start==end){
//计算中间的角标
mid = (start + end)/2 ;
if(arr[mid] ==value){
return mid ;
}else if(arr[mid] > value){
//如果中间角标上的值大于要查找的值,
//说明中间之后面的数都不可能匹配上了
end = mid - 1 ;
}else if (arr[mid] < value){
//如果中间角标位上的值小于要查找的值,
//说明中间值前面的数都不可能匹配上了
start = mid + 1 ;
}
}
//没有找到的话返回-1
return -1 ;
}
}
四、冒泡排序
1、定义:
。相邻的两个孩子比较,然后交换位置,每次循环都会将有效元素中最大的或最小
的移动到有效位的最后
。经过多次循环之后,就可以排出一个有序的数组
public class TestDemo{
public static void main(String[] args){
}
public static void bubbleSort(int[] arr){
//外循环控制整体的循环次数,每次都可以确定一个最大或最小元素
for(int i =1 ;i <arr.length;i++ ){
//内循环控制有效范围内相邻的元素的比较
for(int j = 0 ; j<arr.length-i ; j++){
int temp =arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}