数组(一)
一、概念
-
数组可以批量有序存储数据
-
数组本身是一种引用数据类型,理解成一个容器
语法:
-
int[] arr = new int[5]
-
数据类型[] 数组名称 = new 数据类型前后一致int[数据长度]
-
int[] arr = {1,3,2,4};
-
数据类型[] 数组名 = {值1,值2,值3};
-
-
int[] arr;
-
arr={1,3,2,4}
-
数据类型[] 数组名;
-
数组名 = {值1,值2,值3};
-
package com.JavaSE.homework.Day12.DemoArr1; public class Arr { public static void main(String[] args) { int[] arr1=new int[4];//length 数组的长度 是一个整型int int[] arr2={1,3,2,4}; for (int i=0;i<arr1.length;i++){ arr1[i]=arr2[arr2.length-i-1]; System.out.println(arr1[i]); } } }

-
数组的默认值
-
int[] arr=new int[3];
-
inta;---默认0
-
创建自定义对象时,成员变量不赋值,都在堆中有相应的默认值
数组也是在堆内存创建对象,所以也有默认值
package com.JavaSE.homework.Day12.DemoArr2; public class Arr2 { public static void main(String[] args) { int[] arr=new int[3]; System.out.println(arr[0]);//0 String[] arr2=new String[3]; System.out.println(arr2[1]);//null } }
总结:
-
数组的写法两种(第二种又可以分为两小种)
-
数组的length
-
数组的索引(0~length)
-
数组的默认值(和里面存放的数据有关)
二、数组遍历
把数组中存放的数据,一次性取出
package com.JavaSE.homework.Day12.DemoArr1; public class Arr { public static void main(String[] args) { int[] arr1=new int[4]; int[] arr2={1,3,2,4}; for (int i=0;i<arr1.length;i++){//索引遍历 arr1[i]=arr2[i]; System.out.println(arr1[i]); } for (int i:arr2){//增强for遍历 System.out.println(i); } } }
两种遍历:根据索引遍历(重点) 增强for遍历
三、数组的扩容问题
数组的存储特性
-
数组一旦创建,容量就固定不变(例如生产一个杯子,容量500ml)
堆中的内存不可更改,虽然本来的数组的内存不能扩容,我们可以用这个数组名重新引用一个新的地址,并把值重新赋值,以此达到扩容的目的
package com.JavaSE.homework.Day12.DemoArr3; public class Arr3 { public static void main(String[] args) { int[] arr1={1,5,3,4}; int expand=2;//扩容的容量 int[] arr2=new int[arr1.length+expand]; for (int i=0;i<arr1.length;i++){ arr2[i]=arr1[i]; System.out.println(arr2[i]); } for (int m=arr2.length-1;m>=arr1.length;m--){ arr2[m]=100;//扩容数值的字面量 System.out.println(arr2[m]); } } }

四、数组应用
1.求数组所有数据的和?
2.求平均值?
package com.JavaSE.homework.Day12.DemoPractice; public class Practice1 { public static void main(String[] args) { int[] arr1 = {1, 2, 3, 4, 5}; int sum = 0; int ave = 0; for (int i = 0; i < arr1.length; i++) { sum += arr1[i]; ave = sum / arr1.length; } System.out.println(sum); System.out.println(ave); } }
3.一个数组中放入1到100?
package com.JavaSE.homework.Day12.DemoPractice; public class Practice2 { public static void main(String[] args) { int[] arr1 = new int[100]; for (int i = 0; i < arr1.length; i++) { arr1[i]=i+1; System.out.println(arr1[i]); } } }
4.倒序遍历?和 放入新的数组中?
package com.JavaSE.homework.Day12.DemoPractice; public class Practice3 { public static void main(String[] args) { int[] arr1 = {1, 2, 3, 4, 5}; int[] arr2 = new int[5]; int j = 0; for (int i = arr1.length-1; i >= 0; i--,j++) { arr2[j] = arr1[i]; System.out.println(arr2[j]); } for (int m:arr2){//遍历输出 System.out.println(m); } } }
5.数组的交换{1,2,3 ,0,7,8,9 } 变成 {9,8,7,0,3,2,1}
package com.JavaSE.homework.Day12.DemoPractice; public class Practice4 { public static void main(String[] args) { int[] arr1 = {1, 3, 7, 4, 88}; int[] arr2 = {2, 34, 2, 6, 856}; int j; for (int i = 0; i < arr1.length; i++) { j = arr1[i]; arr1[i] = arr2[i]; arr2[i] = j; } for (int m : arr1) { System.out.println(m); } for (int n : arr1) { System.out.println(n); } } }
6.最值
package com.JavaSE.homework.Day12.DemoPractice; public class Practice5 { public static void main(String[] args) { int[] arr1 = {3, 34, 2, 856, 86}; int max=arr1[0]; int min=arr1[0]; for (int i = 0; i < arr1.length-1; i++) { if (max < arr1[i + 1]) { max=arr1[i + 1]; } if (min > arr1[i + 1]) { min=arr1[i + 1]; } } System.out.println(max); System.out.println(min); } }
7.求索引,给一个元素5,它在数组{3456, 345, 23, 5, 8136}中的索引是多少?
package com.JavaSE.homework.Day12.DemoPractice; public class Practice6 { public static void main(String[] args) { int[] arr1 = {3456, 345, 23, 5, 8136}; for (int i = 0; i < arr1.length - 1; i++) { if (arr1[i]==5) { System.out.println(i); } } } }
8.数组是可以放入重复元素的,数组去重问题!(不包括0)
{12,4,4,3,3,6,5,6}
判断一个元素在某个数组中是否存在?
package com.JavaSE.homework.Day12.DemoPractice; public class Practice7 { public static void main(String[] args) { int[] arr1 = {345, 345, 23, 5, 23,6}; int[] arr2 = new int[arr1.length]; boolean flag=true; for (int i = 0; i < arr1.length; i++) {//i为第一个比较数,j是第二个比较数 for (int j = 0; j < arr1.length; j++) {//i和j索引不同时如果值相等则为重复,索引相等则是比较本身 if (i != arr1.length-1-j && arr1[i] == arr1[arr1.length-1-j]) { flag=false;//重复标记false,不赋值给arr2 } } if (flag){ save(arr2,i,arr1[i]); } flag=true;//每次i的一轮比较完要初始flag,不然下次没重复也不放入arr2 } for (int s : arr2) {//遍历输出 System.out.println(s); } } public static void save(int[] arr2,int a,int b){ arr2[a]=b;//放入arr2 } }
五、二维数组
把一维数组作为元素,放入到二维数组中
语法:
int [] [] arr={{1,2,5},{,6,9},{123,45}}
数据类型怕[] [] 二维数组名(变量)=new 数据类型[二维数组长度] [一维数组长度];
数据类型[] [] 二维数组名(变量)={{12,3,5},{55,33},{10,20}};

浙公网安备 33010602011771号