javaSE数组操作随笔
数组
概念
一种常见的数据结构,能够存储一组相同类型的数据
作用
储存一组相同类型的数据结构,方便进行数理统计,也可以进行信息的展示
定义
数据类型[] 数组名;
数组名 = new 数据类型[数组的长度];
数组名 = new 数据类型[]{元素1,元素2,...,元素n}
数据类型[] 数组名 = new 数据类型 [数组的长度];
数据类型[] 数组名 = {元素1,元素2,...,元素n};
注意
-
栈
数据类型[] 数组名
-
堆
new 数据类型[5];
数组名 = new 数据类型[5];
-
注意不同类型默认值
-
注意new 数据类型[] 可以先定义再赋值
基本要素
-
标识符
数组名称,是专业术语,本质是变量名
-
数组元素
数组中每一块空间储存的元素
-
元素类型
数组存放的类型
-
元素下标
数组中每一个元素所处的位置就是数组元素的下标,从0开始,最大值为数组长度-1
-
特性
长度一旦定义就不能改变,除非重新赋值
数组操作
-
遍历
将数组中元素全部查看一遍(循环)
-
修改数组中的元素
ed:数列能够被三整除并放回去
public class example1 { public static void main(String[] args) { int[] numbers = {10,12,17,32,39,50}; for (int i = 0; i < numbers.length; i++) { if (numbers[i] % 3 == 0) { int result = numbers[i]*numbers[i]; numbers[i] *= numbers[i]; } } } -
向数组中添加元素
ABCDE F 将F插入到B后面
public class example2 { public static void main(String[] args) { String[] persionArr = {"A", "B", "C", "D", "E"}; String[] newArr = new String[persionArr.length + 1]; int inDex = 2; for (int i = 0; i < inDex; i++) { newArr[i] = persionArr[i]; } newArr[inDex] = "F"; for (int i = inDex ; i < persionArr.length; i++) { newArr[i + 1] = persionArr[i]; } persionArr = newArr; for (int i = 0; i <persionArr.length; i++) { System.out.println(persionArr[i]); } } } -
删除数组中的元素
接上题,C离开
public class example3 { public static void main(String[] args) { String[] persionArr = {"A", "B", "F", "C", "D","E"}; String[] newArr = new String[persionArr.length - 1]; int inDex = 3; for (int i = 0; i < inDex; i++) { newArr[i] = persionArr[i]; } for (int i = inDex +1; i < persionArr.length; i++) { newArr[i-1] = persionArr[i]; } persionArr = newArr; for (int i = 0; i < persionArr.length; i++) { System.out.println(persionArr[i]); } } } -
数组拷贝与扩容
语法
System.arrayCopy(原数组,拷贝的开始位置,目标数组,存放的开始位置,拷贝的元素个数;)示例
public class example2 { public static void main(String[] args) { String[] persionArr = {"A", "B", "C", "D", "E"}; String[] newArr = new String[persionArr.length + 1]; int inDex = 2; // for (int i = 0; i < inDex; i++) { // newArr[i] = persionArr[i]; // } // 数组拷贝 System.arraycopy(persionArr, 0, newArr, 0, inDex); newArr[inDex] = "F"; // for (int i = inDex ; i < persionArr.length; i++) { // newArr[i + 1] = persionArr[i]; // } System.arraycopy(persionArr, inDex, newArr, inDex +1, persionArr.length - inDex); persionArr = newArr; for (int i = 0; i <persionArr.length; i++) { System.out.println(persionArr[i]); } } }public class example3 { public static void main(String[] args) { String[] persionArr = {"A", "B", "F", "C", "D","E"}; String[] newArr = new String[persionArr.length - 1]; int inDex = 3; // for (int i = 0; i < inDex; i++) { // newArr[i] = persionArr[i]; // } System.arraycopy(persionArr, 0, newArr, 0, inDex); // for (int i = inDex +1; i < persionArr.length; i++) { // newArr[i-1] = persionArr[i]; // } System.arraycopy(persionArr, inDex + 1, newArr, inDex, newArr.length - inDex -1); persionArr = newArr; for (int i = 0; i < persionArr.length; i++) { System.out.println(persionArr[i]); } } } -
数组扩容
见第四行第七行
public class example4 { public static void main(String[] args) { String[] persionArr = {"A", "B", "C", "D","E"}; String[] newArr = Arrays.copyOf(persionArr, persionArr.length+1); int inDex = 2; //A B C D E null =>A B C C D E System.arraycopy(newArr, inDex, newArr, inDex+1, persionArr.length - inDex); //A B C C D E =>A B F C D E newArr[inDex] = "F"; persionArr = newArr; for (int i = 0; i < persionArr.length; i++){ System.out.println(persionArr[i]); } } }二维数组
-
数组排序
数组中的元素从小到大或从大到小顺序依次排列
-
冒泡排序
基本定义跟冒泡一样
ed:
public class example5 { public static void main(String[] args) { int [] number = {10,70,55,80,25,60}; for(int i=0;i<number.length;i++){ for(int j=0;j<number.length -i - 1;j++){ if (number[j] < number[j+1]) { int temp = number[j]; number[j] = number[j+1]; number[j+1] = temp; } } } for(int i=0;i<number.length;i++){ System.out.println(number[i]); } } } -
工具类的排序操作
语法
Array.sort(数组名);//将数组中的元素进行升序排列 Arrays.toString(数组名);//将数组中的元素组装为一个字符串import java.util.Arrays; public class example5 { public static void main(String[] args) { int [] number = {10,70,55,80,25,60}; for(int i=0;i<number.length;i++){ for(int j=0;j<number.length -i - 1;j++){ if (number[j] < number[j+1]) { int temp = number[j]; number[j] = number[j+1]; number[j+1] = temp; } } } // for(int i=0;i<number.length;i++){ // System.out.println(number[i]); System.out.println(Arrays.toString(number)); } }import java.util.Arrays; public class example6 { public static void main(String[] args) { char [] chars = {'c','a','g','p','f'}; Arrays.sort(chars);//对数组进行深序排序 System.out.println(Arrays.toString(chars)); String [] names = {"zhangsan","zhangsi","liso","lisib","lisan"}; Arrays.sort(names); System.out.println(Arrays.toString(names)); } } -
二分查找法
又称折半查找 以中间分为两个区间,利用中间元素与目标元素比较大小,从而确定目标元素所处的区间,依次往复执行,直到找到目标元素为止
二分查找只适用于已经排好序的数组
ed:从95,93,87,86,79,72,60,53中快速找出元素60所处位置
public class example7 { public static void main(String[] args) { int [] numbers = {95,93,87,86,79,72,60,53}; int target = 60; int start = 0; int end = numbers.length - 1; while (start < end) { int mid = (start + end) / 2; if (numbers[mid] > 60) { start = mid + 1; }else if (numbers[mid] < 60) { end = mid -1; }else { System.out.println("目标元素"+target +"所处位置:" + mid); break; } } } }二维数组
public class example8 { public static void main(String[] args) { String[][] personInfos = new String[10][3]; double[][] agesAndScores = new double[5][2]; agesAndScores[0] = new double[]{18,60}; agesAndScores[1] = new double[]{19,65}; agesAndScores[2] = new double[]{28,90}; agesAndScores[3] = new double[]{22,55}; agesAndScores[4] = new double[]{21,60}; String[][] infos = new String[5][]; infos[0] = new String[]{"刘德华"}; infos[1] = new String[]{"张学友","很牛逼"}; infos[2] = new String[]{"张三","学渣","整天不务正业","吃喝嫖赌样会"}; } }public class example9 { public static void main(String[] args) { String[][] musicInfos = new String[5][3]; Scanner sc = new Scanner(System.in); for (int i = 0; i < musicInfos.length; i++) { System.out.println("Enter music name: "); String name = sc.next(); System.out.println("Enter singer name: "); String singer = sc.next(); System.out.println("Enter music public time: "); String date = sc.next(); musicInfos[i] = new String[] {name, singer, date}; } } }
-
public class example10 {
public static void main(String[] args) {
double[][][] stuInfos = new double[3][][];
stuInfos[0] = new double[10][2];
stuInfos[1] = new double[8][2];
stuInfos[2] = new double[7][2];
Scanner sc = new Scanner(System.in);
for (int i = 0; i < stuInfos.length; i++) {
for (int j = 0; j < stuInfos[i].length; j++) {
System.out.print("Enter student ages: ");
int age = sc.nextInt();
System.out.println("Enter student achievement: ");
double achievement = sc.nextDouble();
stuInfos[i][j] = new double[]{age,achievement};
}
}
for (int i = 0; i < stuInfos.length; i++) {
double totalAge = 0,totalAchievement = 0;
for (int j = 0; j < stuInfos[i].length; j++) {
totalAge += stuInfos[i][j][0];
totalAchievement += stuInfos[i][j][1];
}
System.out.println("average ages: " + totalAge/stuInfos.length
+ "\naverage achievement: " + totalAchievement/stuInfos.length);
}
}
}

浙公网安备 33010602011771号