Java(5)数组
Java数组
数组是Java重要数据结构之一,和类一样,数组也是引用数据类型,数组是用来存储固定大小的同类型元素。
声明和创建数组
声明数组:
dataType[] arrayRefVar;
//如:double[] myList;
创建数组:
arrayRefVar = new dataType[arraySize];
//如:myList = new double[10];
arrayRefVar = {value0, value1, ..., valuek};
//如:mylist={1,2,4,5,3,1}
同时声明创建数组:
- 使用方法:
dataType[] arrayRefVar = new dataType[arraySize];
dataType[] arrayRefVar = {value0, value1, ..., valuek};
//dateType: 要创建的数组的元素类型
//arrayRefVar :数组名称
//arraySize:数组存储大小
- 案例
// 数组大小
int size = 5;
// 定义数组
double[] myList = new double[size];
myList[0] = 5.6;
myList[1] = 4.5;
遍历数组
使用基本循环:
for (int i = 0; i < myList.length; i++) {
System.out.println(myList[i] + " ");
}
使用For-Each循环:
- 语法格式如下:
for(type element: array){
System.out.println(element);
}
//type:数组元素类型
//array:数组名称
- 案例:
double[] myList = {1.9, 2.9, 3.4, 3.5};
// 打印所有数组元素
for (double element: myList) {
System.out.println(element);
}
多维数组
多维数组可看成数组的数组,创建方法与一维差不多,如:
String str[][] = new String[3][4]
int a[][] = new int[2][3] //二维数组a可看成一个两行三列的数组
多维数组的动态初始化:
String s[][] = new String[2][];
s[0] = new String[2];
s[1] = new String[3];
s[0][0] = new String("Good");
s[0][1] = new String("Luck");
s[1][0] = new String("to");
s[1][1] = new String("you");
s[1][2] = new String("!");
/*
s[0]=new String[2] 和 s[1]=new String[3] 是为最高维分配引用空间,也就是为最高维限制其能保存数据的最长的长度,然后再为其每个数组元素单独分配空间s0=new String("Good")等操作。
*/
java.util.Arrays 类
import java.util.Arrays;
Arrays 类能方便地操作数组,它提供的所有方法都是静态的, Ctrl+鼠标左键可以快速查看各个方法的源码
- Arrays类的方法:
Arrays.toString(a);//将数组a以字符串形式输出,用该方法才能输出数组的值
Arrays.deepToString(a);//将多维数组的内容以字符串形式输出
Arrays.fill(a,from,to,int var)//给数组赋值
int [] a=new int[6];
Arrays.fill(a, 2);
System.out.println(Arrays.toString(a));
Arrays.fill(a, 2,4,8);
System.out.println(Arrays.toString(a));
//a为数组名称,from,to为索引范围,var为要替换的值
Arrays.equals(); //判断数组元素是否一一对应相等
Arrays.equals(a,b); //判断a,b两个数组元素是否一致
Arrays.sort();
//对数组排序,原数组会被修改成为排过序的新数组
//--------------------------------------------------
//对数组进行排序,使用冒泡排序法:
int[] ns={34,2,4,6,3,23,2,3,23,3,5,24};
for (int i =0;i<ns.length;j++){
for(int j=i+1;j<ns.length;j++){
if(ns[i]>ns[j]){
int timp=ns[j];
//交换两个变量的值必须通过临时变量
ns[j]=ns[i];
ns[i]=tmp;
}
}
}
Arrays.binarySearch(a,key);// a: 要搜索的数组,key:要搜索的值
//用二分查找算法(从数组中间开始查找)在给定数组中搜索给定值的对象(Byte,Int,double等)。数组在调用前必须排序好的。
/*
返回值:如果key在数组中,则返回搜索值的第一个索引;否则返回-1或“-”(插入点)。插入点是索引键将要插入数组的那一点,即第一个大于该键的元素的索引。
技巧:
[1] 搜索值不是数组元素,且在数组范围内,从1开始计数,得“ - 插入点索引值”;
[2] 搜索值是数组元素,从0开始计数,得搜索值的索引值;
[3] 搜索值不是数组元素,且大于数组内元素,索引值为 – (length + 1);
[4] 搜索值不是数组元素,且小于数组内元素,索引值为 – 1。*/