day04

本文详细介绍了数组的基本概念,包括声明、创建、初始化、访问和复制数组的方法。探讨了如何使用循环和System类方法复制数组,以及如何使用foreach循环遍历数组。同时,介绍了使用Arrays类进行排序、查找和填充数组的技巧。
摘要由CSDN通过智能技术生成

数组的基础知识

单个的数组变量可以引用一个大的数据集合
一旦数组被创建,它的大小是固定的。使用一份数组引用变量,通过下标来访问数组中的元素。

声明数组变量

元素类型[ ] 数组引用变量
double[ ] myList;
元素类型 数组引用变量[ ]

创建数组

不同于基本数据类型变量的声明,并不在内存中给数组分配任何空间。只是创建一个对数组的引用的存储位置。如果变量不包含对数组的引用,那么这个变量的值为null。除非数组已经被创建,否则不能给它分配任何元素。
myList=new double[10];
声明、创建、赋值合并在一条语句里
double[ ] myList=new double[10];
赋值:
myList[0]=1.2;
myList[1]=2.99;

myList[9]=129.043;
*实际上一个数组变量存储的是指向数组的引用。

数组大小和默认值

myList.lengths为10
当创建数组后,元素被赋予默认值,数值型基本数据类型的默认值为0,char型的默认值为‘\u0000’,boolean型的默认值为false。

访问数组元素

数组元素可以通过下标访问。
下标变量:
myList[9];

数组初始化语法

double[ ] myList={1.0, 2.3, 8.9};
数组初始化语法中不使用操作符new。

处理数组

使用随机数初始化数组:
for(int i=0;i<=myLIst.length;i++){
myList[i]=Math.random()*100;
}
显示char[]类型数组:
cha[] city={‘D’,‘a’,‘l’,‘l’,‘a’,‘s’};
System.out.println(city);

foreach循环

不使用下标变量就可以顺序遍历整个数组:
for(double e:myList){
System.out.println(e);
}
越界访问数组会抛出一个运行错误ArrayIndexOutOfBoundsException

数组的复制

list2=list1;
该语句并不能将list1引用的数组内容复制给list2,而只是将list1的引用值复制给了list2,使两个变量都指向相同的内存地址。
list1和list2都指向同一个数组,list2原先所引用的数组不能再引用,它就变成来了垃圾,会被Java虚拟机自动回收(这个过程称为垃圾回收)。
Java可以使用赋值语句复制基本数据类型的变量,但不能复制数组。
复制数组有三种方法:
1)使用循环语句逐个的复制数组元素
int[] sourceArray=(2,3,1,5,10);
int[] targetArray= new int[sourceArray.length];
for(int i=0;i<=sourceArray.length;i++){
targetArray[i]=sourceArray[i];
}
2)使用System类的静态方法arraycopy
System.arrayCopy(sourceArray,0,targetArray,0,sourceArray.length);
0是两数组是起始位置,复制完成后两数组占有独立的内存空间。
3)使用clone方法复制数组。

将数组传递给方法

当将一个数组传递给方法时,数组的引用被传给方法。
//匿名数组:没有显式的引用变量
printArray(new int[]{1,5,3,4});
public static void printArray(int[] array){
for(int i=0;i<array.length;i++){
System.out.print(array[i]+“ ”);
}
}

从方法中返回数组

当从方法中返回一个数组时,数组的引用被返回。
int[] list1={1,3,4,5,5};
int[] list2=reverse(list1);
public staticint[] reverse(int[] list){
int [] result=new int[list.length];
for(int i=0,j=result.length-1;i<list.length;i++,j–){
result[j]=list[i];
}
return result;
}

可变长参数列表

具有同样类型的可变长度的参数可以传递给方法,并将作为数组对待。
printMax(34,3,2,4,5.3);
printMax(new double[]{1,2,3});

数组的查找

如果一个数组排好序了,对于寻找数组中的一个元素,二分查找比线性查找更加高效。

线性查找法

线性查找法将要查找的关键字key与数组中的元素逐个进行比较。

二分查找法

前提是数组中的元素必须已经排好序。

数组的排序

Arrays类

java.util.Arrays类包含一些实用的方法用于常见的数组操作,比如排序和查找。
可以使用sort或者parallelSort方法对整个数组或部分数组进行排序。
可以使用二分查找法binarySearch方法,在数组中查找关键字。数组必须提前按升序排列好。
可以使用equals方法检测两个数组是否相等。
可以使用fill方法填充整个数组或部分数组。
可以使用toString方法来返回一个字符串的所有元素。

命令行参数

main方法可以从命令行接收字符串参数。

向main方法传递字符串

java TestMain arg0 arg1 arg2
java TestMain “First num” alpha 53

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值