Java数组:一块连续的内存,装下同类的的瓶子

Java数组:一块连续的内存,装下同类的的瓶子 数组是什么学完循环之后紧接着就遇到了数组。说实话刚开始我有点懵——明明单个变量用着挺顺手的为啥非要搞个数组出来直到有一天老师让我们存50个学生的成绩。用单个变量score1、score2……写到score50手都得废掉。数组就是来解决这个问题的——把一堆相同类型的数据整整齐齐地排在一起用同一个名字通过下标来区分。打个比方变量就像一个个独立的盒子每个盒子有自己的名字数组就像一排连在一起的储物柜整体叫一个名字每个小格子编个号下标。怎么定义一个数组最基础的写法int[]arrnewint[5];// 一个能装5个整数的数组这行代码干了三件事声明了一个数组变量、在内存里划了一块连续的空间、把地址赋给了变量。还有两种偷懒的写法// 方式一声明时直接赋值int[]arr1{10,20,30,40,50};// 方式二先声明再初始化int[]arr2;arr2newint[]{1,3,5,7,9};踩坑提醒数组一旦定义长度就固定了。想改大小对不起重新建一个吧。下标从0开始不能越界数组的下标从0开始到length-1结束。int[]arr{10,20,30,40};System.out.println(arr[0]);// 10第一个元素System.out.println(arr[3]);// 40最后一个元素System.out.println(arr[4]);记住一个口诀数组长度是N下标范围0到N-1。length属性可以随时获取数组长度遍历时用i arr.length而不是i arr.length能有效避免越界。遍历数组两种方式普通for循环int[]arr{10,20,30,40,50};for(inti0;iarr.length;i){System.out.println(arr[i]);}需要用到下标时就选这个比如要修改某个位置的元素。增强for循环for(intnum:arr){System.out.println(num);}代码更简洁但只能读不能改。适合只需要查看元素内容的场景。找最值找数组里的最大值或最小值思路很简单——先假设第一个元素就是答案然后挨个比较发现有更好的就替换。int[]arr{20,27,5,3,18,32,16};intmaxarr[0];for(inti1;iarr.length;i){if(arr[i]max){maxarr[i];}}System.out.println(最大值max);这个思路在其他地方也能用比如找第二名、找最小的套路都一样。动态扩容数组不够用了怎么办数组定长是个硬伤。实际开发中经常不知道要存多少数据比如学生管理系统学生数量是动态变化的。解决方案满了就新建一个更大的数组把原来的数据拷过去。int[]arrnewint[3];// 存数据的过程中发现满了...arrArrays.copyOf(arr,arr.length3);// 扩容3个位置冒泡排序排序是数组操作里的重头戏冒泡排序是最基础的一种。核心思想相邻元素两两比较大的往后“冒”。int[]arr{20,4,16,32,12,6,18,69,34};for(inti0;iarr.length-1;i){for(intj0;jarr.length-1-i;j){if(arr[j]arr[j1]){inttemparr[j];arr[j]arr[j1];arr[j1]temp;}}}Arrays.sort(arr)当然实际工作中没人手写冒泡直接用Arrays.sort(arr)一行搞定。但理解排序的思想比记住API更重要。总结数组是Java里最基础的数据结构但千万别因为它简单就轻视。理解数组本质上是在理解内存的连续分配和下标访问机制这是后面学集合、学算法的基础。