数组的优缺点
优点
- 数组能表示一个变量的集合,可以通过存储多个数据
- 随机访问元素效率高,通过下标问元素效率高 首地址+元素类型字节数+下标
缺点
1,插入元素,删除元素效率太低需要移动大量数据
2,数组定长,不能在原有的基础上扩容
3,数组只能保存一种数据类型
4,数组请求内存必须是连续的,对内存要求相对较高
5,数组没有提供任何的封装的方法,只提供一个属性,所有对元素的操作都需要自定义方法来实现
6,通过内容查找数组元素效率不高,需要逐个比较
public class Test1 {
//主函数
public static void main(String[] args){
int [] arr=getRandomArrays(5, 0, 21);
printArrays(arr);
int a=isExist(arr, 13);
System.out.println(a);
}
//自定一个方法查看指定数组中是否存在指定值的方法
public static int isExist(int [] array ,int value){
for (int i = 0; i < array.length; i++) {
if(value==array[i]){
return i;
}
}
return -1;
}
Arrays 工具类
java .util.Arrays包含了大量的用于操作数组对象的方法(比如排序和搜索 )
常用的方法:
binarySearch(int [] a,int key);
sort();
copyOfRange();
equals();
public static void main(String[] args){
int [] arr=getRandomArrays(15, 0, 21);
printArrays(arr);
//排序数组
Arrays.sort(arr);
printArrays(arr);
//查找是否有指定的值
int key =17;
int index=Arrays.binarySearch(arr, key);
System.out.println(index);
//复制数组arr 前十个元素
int[] newArray = Arrays.copyOf(arr, 10);
printArrays(newArray);
//System 类中提供了一种复制数组的方法。
int [] arra=new int[20];
System.arraycopy(arr, 5, arra, 1, 10);
printArrays(arra);
}
main 方法参数作用
可以用来接收解释执行的时候,从命令行窗口输入的若干个String 数据
变参练习
//jdk1.5 提供一种新的参数语法形式,可以接收任意个数量的实际参数。
//变参参数当作数组操作即可
多维数组
int [] arr:一维数组
int [][] arr :多维数组
二维数组初始化:
动态的:
int [][] arr =new int [3][5];
二维数组中:有3个一维数组;每个一维数组中有5个元素;
静态的:
int [][] arr =new int [][]{高纬度是4,低纬度是3;
{1,23,4},//23---- arr[0][1]
{1,23,4},
{1,23,4},
{1,23,4}
}
public class Test1 {
//主函数
public static void main(String[] args){
//先指定高纬度
int[][] arr=new int[3][];
//对每个元素(一维数组)分配不同长度的空间
arr[0]=new int[3];
arr[1]=new int[4];
arr[2]=new int[5];
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]);
}
}
}
练习二维数组九九乘法表
public class Test1 {
//主函数
//使用二维数组保存九九乘法表的乘积结果
public static void main(String[] args){
final int COUNT=9;
//先创建9个一维数组
int [][] arr=new int[COUNT][];
//对9个一维数组逐个分配空间
for (int i = 0; i < COUNT; i++) {
arr[i]=new int[i+1];
}
//遍历二维数组的元素,并赋值,打印九九乘法 表
for(int i=0;i<arr.length;i++){
for (int j = 0; j <=i; j++) {
//先把程序的结果放在数组中
arr[i][j]=(j+1)*(i+1);
System.out.print((j+1)+"*"+(i+1)+"="+arr[i][j]+"\t");
}
System.out.println();
}
}