一 :数组是什么?
数组就是用来保存一组相同数据类型数据的容器.它会在系统内存空间开辟一块内存用来存储数据
在系统中 数组在栈内存保存时是 堆内存中对应的地址,通过对数组操作对应地址下的数据就会改变.
数组在堆内存中开辟的是一块连续的内存空间可以通过下标进行操作;
1.栈内存的特点:先进后出;
二 数组的类别及声明格式
- 一维数组
数据类型[] (数组名) = 初值.
- 二维数组 :
保存相同类型的多个一维数组
数据类型[][]数组名 = 初值;
- 多维数组 :
方式1:int[]array= new [n];(n代表数据长度)
方式2:int [] array =new int[] {1,2,3,4,5,6,7,8,9,};(有长度有数据)
方式3:int[] array1 = {1,3,5,7,9};语法糖
三 数组的遍历
- 1一维数组遍历
int [] array1 = new int[]{1,3,5,7,9}
for(int i=0;i<array1.length;i++){
System.out.print(array1[i]+" ");
}
1.2 二维数组的遍历
int [][] array1= {
{1,2,3,4},
{1,3,5,7}
};
//遍历
for (int i = 0; i < array1.length; i++) {
for (int j = 0; j < array1[i].length; j++) {
System.out.print(array1[i][j]+" ");
}
}
四 数组的应用
1.比较大小
// 需求:随机10个数 区间为[15,150]
//1.把这10个数放入数组
//2.打印最大值和最小值
//3.分装一个方法
public static void fun(){
int [] array = new int [10] ;
int min =150;
int max =0;
for(int i=0;i<array.length;i++){
arrar[i]=(int)(Math.random()*(150+1-15)+15);
for (int i = 0; i < array.length; i++) {
if (min>array[i]) {
min = array[i];
}
if (max<array[i]) {
max = array[i];
}
}
System.out.println("min="+min);//min=19
System.out.println("max="+max);//max=143
System.out.println(Arrays.toString(array));//[98,143,19,40,74,74,60,82,89,86] tostring :系统方法将数组转化成字符串
}
}
2.数组的排序
2.1 冒泡排序(相邻两个数比较换位)
public class maopaopaixu {
public static void main(String[] args) {
int[] array = new int []{1,5,4,2,9,45,12,65,42,31,22}
for(int i=0;i<array.length-1;i++){
for(int j=0;j<array.length-i-1;j++){
if (array[j]>array[j+1]) {
// 交换
int temp = array[j];
array[j]=array[j+1];
array[j+1] = temp;
}
}
}
System.out.println(Arrays.toString(array));
}
2.2 选择排序(
选择一个数和其他数进行比较排序)
public class Demo06 {
public static void main(String[] args) {
int [] array =new int [] {2,5,8,21,4,32,65,14,22,88,5,11}
for(int i=0;i<array.lenth-1;i++){
for(int j =i+1;j<array.length;j++){
//用2同5,8,21,4,32,65,14,22,88,5,11 比较
//i=0 j 1,2,3...11;
//i=1 j 2,3..11;
//i=2 j 3..11;
if(array[i]>array[j]){
int temp = 0;
temp =array[i];
array[i]=array[j];
array[j] = temp;
}
}
}
System.out.println(Arrays.toString(array));
}
}
3.数组的折半查找(必须是有序的数组)
public class Demo07 {
public static void main(String[] args) {
int[] array = new int[]{1,22,33,44,55,66}
int key=22;
int min=0;
int max = array.length-1;
int mid = (max+min)/2;
while(key!=array[mid]){
// 通过判断来挪动最小下标或最大下标
if(key>array[mid]){
min = mid+1;
}
if (Key<array[mid]) {
max=mid-1;
}
//每次循环都有折半操作
mid = (max+min)/2;
// 数组中没有这个数的时候
if (min>max) {
System.out.println("查无此值");
mid =-1;
break;
}
}
System.out.println("该值在数组中的下标是"+mid);
}
}