“浅学一下”JAVA数组

JAVA学习-03-韩顺平老师

JAVA-数组总结

一维数组

  • 01-数组初始化
    1.动态初始化

    // 第一种
    int a[] = new int[5];
    // 第二种 先定义,后初始化大小
    int a[]; //空值,还没有分配内存空间
    a = new int[5]; // 分配了内存空间
    
    

    2.静态初始化

    // 语法 : 数据类型 数据名[] = {元素值,元素值....}
    double array1[] = {1,33,32,322,25};
    

    3.注意细节:
    ​ -数组是多个相同类型数据的组合
    ​ -数组中的元素是任何类型的数据,但是不能混用
    ​ -数组创建后,如果没有赋值,有默认值
    ​ -数组的下标从0开始
    ​ -数组属于引用类型,数组型数据是对象(object)

  • 02-数组赋值机制
    1.基本数据类型赋值,赋值方式为值拷贝,值传递

    int n1 = 1;
    int n2 = 2;
    n2 = 10; // n1 = 1 n2 = 2
    

    2.数组在默认情况下是引用传递,传递的是地址

    int arr1[] = {1,2,3};
    int arr2[] = arr1;
    arrr2[1] = 10; // n1 = n2 = {1,10,3}
    
  • 03-数组拷贝

    int arr1[] = {1,32,31};
    int arr2[] = new int[arr1.length]; // 开辟一个新的空间,获得一个新的地址
    for(int i = 0; i < i.length; i++) {
        arr2[i] = arr1[i]; // for 循环赋值给arr2
    }
    
  • 04-数组反转

    public class ArrayReserve {
    
        public static void main(String[] args) {
            //方法1 用一个中间值,前后调换顺序
            int arr[] = {11,22,33,44,55,66};
            for(int i = 0; i < arr.length; i++) {
                int temp = arr[arr.length-1-i]; 
                arr[arr.length-1-i] = arr[i];
                arr[i] = temp;
            }
    
            // 方法2 创建一个数组来完成拷贝
            int arr2[] = new int[arr.length];
            for(int i = arr.length-1; i >= 0; i--) {
                arr2[arr.length -1 - i] = arr[i];
            }
            arr = arr2; // 销毁arr原来的地址,释放空间
        }
    }
    
  • 05-数组扩容

    public class ArrayAddandSub {
    
    	public static void main(String[] args) {
    		// 数组扩容	
    		int[] arr = {2,3,4,5};
    		int[] newArr = new int[arr.length + 1];
    		for(int i = 0; i < arr.length; i++) {
    			newArr[i] = arr[i]; // 拷贝数组
    		} 
    		newArr[arr.length] = 6; // 插入增加的值
    		arr = newArr; // 销毁原来创建的数组
    		for(int i = 0; i <= arr.length; i++) {
    			System.out.println(arr[i]);
    		}
    	}
    }
    
  • 06-数组缩减

    public class ArrayAddandSub {
    
    	public static void main(String[] args) {
    		// 数组扩容	
    		int[] arr = {2,3,4,5};
    		int[] newArr = new int[arr.length - 1];
    		for(int i = 0; i < newArr.length; i++) {
    			newArr[i] = arr[i]; // 拷贝数组
    		} 
    		arr = newArr; // 销毁原来创建的数组
    		for(int i = 0; i <= arr.length; i++) {
    			System.out.println(arr[i]);
    		}
    	}
    }
    
  • 07-数组排序
    1.内部排序:在数组内部进行排序,不借助其他数组
    2.外部排序:借助与其他数组来完成排排序
    3.冒泡排序:

    public class BubbleSorting {
    
    	public static void main(String[] args) {
    		// 简单的冒泡排序
    		int[] arr = {132,33,311,22,55}; 
    		// 控制冒泡次数
    		for(int i = 0; i < arr.length - 1; i++) {
    			// 控制比较交换
    		    for(int j = 0; j < arr.length - i -1; j++) {
    		    	if(arr[j] > arr[j + 1]) { // 前后交换
    		    		int temp = arr[j + 1];
    		    		arr[j + 1] = arr[j];
    		    		arr[ j ] = temp;
    		    	}
    		    }
    		}
    		for (int i = 0; i < arr.length; i++) { // 打印输出
    			System.out.print(arr[i] + "\t");
    		}
    	}
    }
    
  • 08-数组查找
    1.顺序查找,效率较低

    public class ArraySearch {
    
    	public static void main(String[] args) {
    		// 顺序查找 打印下标
    		int[] arr = {1,2,344,5,52};
    		int search = 344; // 需要查找的数
    		int index = -1; // 来判断是否查找到了
    		for(int i = 0; i < arr.length; i++) {
    			if(arr[i] == search) {
    				index = i;
    			}
    		}
    		if( index == -1 ) {
    			System.out.println(search + "不在数组中~");
    		} else {
    			System.out.println(search + "在数组中的下标为:" + index);
    		}
    	}
    }
    

    2.二分查找 (适用于已经排序号的数组)

    public class BinarySearch {
    
    	public static void main(String[] args) {
    		// 二分查找
    		int[] arr = {11,22,33,44,55,66,77,88};
    		int searchNum = 33; // 查找的数
    		int start = 0; // 起始位置
    		int end = arr.length - 1; // 最后位置
    		int index = -1; // 记录查找的地址
    		while( start != end ) {
    			int mid = (start + end) / 2;
    			if(searchNum == arr[mid]) {
    				index = mid;
    				break;
    			} else if (searchNum >arr[mid]) {
    				start = mid;
    			} else {
    				end = mid;
    		}
    		}
    		if( index == -1) {
    			System.out.println("没有找到" + searchNum);
    		} else {
    			System.out.println(searchNum + "的下标为:" + index);
    		}
    	}
    }
    

二维数组

  • 01-数组初始化
    1.动态初始化

    // 第一种
    int[][] a = new int[2][3];
    // 第二种 先定义,后初始化大小
    int[][] a; //空值,还没有分配内存空间
    a = new int[2][3]; // 分配了内存空间
    
    

    2.静态初始化

    // 语法 : 数据类型 数据名[] = {元素值,元素值....}
    double array1[] = {{1,33,32,322,25},{1,2,3,4,5}};
    

    3.注意细节:
    ​ -二维数组的每个元素是一个一维数组
    -二维数组的元素存放的实际上是一个个一维数组的地址,每个地址指向一个一位数组
    -二维数组的列数可以不相等
    -二维数组的三种生名方式

    // 三种声明方式
    // 1
    int[][] arr = new int[2][3];
    // 2
    int arr[][] = new int[2][3];
    // 3
    int[] arr[] = new int[2][3];
    
  • 数组练习

    /*
    1.动态创建列数不确定的数组(打印杨辉三角)
    1
    1 1
    1 2 1
    1 3 3 1
    */
    public class YangHui {
    	public static void main(String[] args) {
    		int col = 5; // 杨辉三角行数
    		int[][] arr = new int[col][]; // 声明行数,不声明列数
    		for(int i = 0; i < arr.length; i++) {
    			arr[i] = new int[i+1]; // 动态生成列数
    			for(int j = 0; j < arr[i].length; j++) {
                    // 每行最后一个和第一个为1
    				if(j == 0 || j == arr[i].length - 1){ 
    					arr[i][j] = 1;
    				} else {
                        //上一行两个数相加
    					arr[i][j] = arr[i-1][j] + arr[i-1][j-1];
    				}
    			}
    		}
    		for(int i = 0; i < arr.length; i++) { // 打印输出
    			for(int j = 0; j < arr[i].length; j++) {
    				System.out.print(arr[i][j] + "\t");
    			}
    			System.out.println("");
    		}
    	}
    }
    /*
    已知一个升序数组,插入一个元素,使该数字依然是升序
    例如 [10,23,45,56],添加33后,数组为[10,23,33,45,56]
    */
    public class TwodismensionExercise {
    	public static void main(String[] args) {
    		int[] arr = {10,23,45,56};
    		int insertNum = 33; // 插入的数
    		// 扩容
    		int[] newArr = new int[arr.length  + 1];
    		for(int i = 0; i < arr.length; i++) {
    			newArr[i] = arr[i];
    		}
    		newArr[arr.length] = insertNum;
    		arr = newArr; // 销毁原来数组
    		// 从后往前排序,类似冒泡
    		for(int i = arr.length - 1; i > 0; i--) {
    			if(arr[i] < arr[i-1]){
    				int temp = arr[ i ];
    				arr[ i ] = arr[i - 1];
    				arr[i - 1] = temp;
    			}
    		}
    		for (int i = 0; i < arr.length; i++) { // 打印输出
    			System.out.print(arr[i] + "\t");
    		}
    	}
    }
    /*
    随机生产10个 1-100 之间的值保存到数组中,并且倒叙输出
    以及求出平均值,最大值和最大值的小标,并查找里面是否有8
    */
    public class ArrayAddandSub {
    	public static void main(String[] args) {
    		int[] arr = new int[10];
    		for(int i = 0; i < arr.length; i++) {
    			// 生成随机值,放入到数组中
    			arr[i] = (int)(Math.random()*100);
    		}
    		for(int i = arr.length - 1; i >= 0; i--) { //倒叙输出
    			System.out.print(arr[i] + "\t");
    		}
    		// 查询最大值和它的下标
    		int max = 0;
    		int maxIndex = 0;
    		for(int i = 0; i < arr.length; i++) {
    			if(arr[i] > max) {
    				max = arr[i]; // 获得最大值
    				maxIndex = i; // 获得最大值下标
    			}
    		}
    		System.out.println("最大值为:" + max + "下标为:" + maxIndex);
    		// 查询数组中是否有8
    		int flag = -1;
    		for(int i = 0; i < arr.length; i++) {
    			if (arr[i] == 8) {
    				System.out.println("8在该数组中~");
    			}
    		}
    		if(flag == -1) {
    			System.out.println("8不在该数组中~");
    		}
     	} 
    }
    

数组小结,大家可以交流学习!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值