数组简介:
- 数组是一组变量集合,存储相同数据类型的一组数据。 连续的空间。
- 声明一个变量就是在内存空间划出一块合适的空间。
- 声明一个数组就是在内存空间划出一块连续的空间。
- 数组名,即标识符,连续空间的首地址。 —数组只有一个名字。
- 元素下标标明了元素在数组中的位置,从0开始。
- 数组中的每个元素都可以通过下标来访问。
- 数组长度固定不变,避免数组越界。
如何使用数组?
使用数组四步走:
1.声明数组 int [ ]a; —告诉计算机数据类型是什么?
声明的数组变量: —声明数组的时候不告诉长度。
dataType[] arrayRefVar; // 首选的方法 或者 dataType arrayRefVar[]; // 效果相同,但不是首选方法
eg:double[] myList; // 首选的方法2.分配空间 a = new int[5]; —告诉计算机分配几个连续的空间。
- 3.赋值 a[0] = 8; —向分配的格子里放数据
- 4.处理数据 a[0] = a[0] * 8;
数组赋值:
- 方法一:边声明边赋值
int[] score = {89,79,76};
int[] score = new int[]{89,79,76}; //不能指定数组长度 - 方法二:使用循环
for(int i=0;i<30;i++){
score[i]=input.nextInt();
}
数组的创建:
数组创建的格式是:
数据类型[ ] 数组名称=new 数据类型[ 数组的长度 ]
数据类型[ ] 数组名称={元素1,元素2...}
- Java语言使用new操作符来创建数组。
语法:arrayRefVar = new dataType[arraySize];
- 1:使用dataType[arraySize]创建了一个数组。
- 2:把新创建的数组的引用赋值给变量 arrayRefVar。
数组变量的声明,和创建数组可以用一条语句完成,如下所示: dataType[] arrayRefVar = new dataType[arraySize]; 还可以使用如下的方式创建数组。 dataType [] arratRefVar = {value0,value1,...,valuek}; 数组的元素是通过索引访问的。数组索引从0开始,所以索引值从0到arrayRefVar.length-1。
处理数组(数组的遍历):
当处理数组元素时候,我们通常使用基本循环或者foreach循环。
foreach循环:
foreach循环又称加强型循环,能在不使用下标的情况下遍历数组。
显示数组myList中的所有元素:
double[] myList = { 1,2,3,4,5,2,1};
for(double element:myList){
System.out.println(element); //打印所有数组元素
}
~~~~~~~~~~~
实例:*从第一个开始遍历到最后一个,不能控制范围。
for(int score:scores){
//第一个score是每一次遍历到的元素
//第一个表达式是声明一个变量去接受每次循环得到的元素
//第二个scores是要遍历的对象
//第二个表达式是需要变量的数组或集合
//定义的变量类型必须跟数组的类型一致(表达式一的数据类型必须跟表达式二的数据类型一致)
System.out.println(score);
}
数组作为函数的参数:
数组可以作为参数传递给方法。
eg:打印int数组中元素的方法。
for(int i=0;j<array.length;i++){
System.out.println(array[i]+" ");
}
数组作为函数的返回值:
public static int[] 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;
}
result数组作为函数的返回值。
Arrays类:
java.util.Arrays类能方便地操作数组,它提供的所有方法都是静态的。具有以下功能:
给数组赋值:通过fill方法。
对数组排序:通过sort方法,按升序。
比较数组:通过equals方法比较数组中元素之是否相等。
查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作。
多维数组:
多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组。
String str[][] = new String[3][4];
多维数组的动态初始化(以二维数组为例):
1.直接为每一维数组分配空间:
type arrayName = new typ[arraylenght1][arraylenght2];
type 可以为基本数据类型和复合数据类型,arraylenght1 和 arraylenght2 必须为正整数,arraylenght1 为行数,arraylenght2 为列数。
例如:`int a[][] = new int[2][3];`
2. 从最高维开始,分别为每一维分配空间,例如:
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”) 等操作。
多维数组的引用(以二维数组为例)
对二维数组中的每个元素,引用方式为 arrayName[index1][index2],例如:
num[1][0];
ArrayList类:
数组的长度不固定时,需要通过List来实现不固定长度的数组操作。
List是一个无限制长度的数组接口,ArrayList类和LinkedList类实现了接口来满足数组无限长度的需求。
二者的区别是:ArrayList方便获取指定位置的值,但是不方便修改指定位置的值;LinkedList类方便修改指定位置的值,不方便获取指定位置的值。
ArrayList类实现了Serializable, Cloneable, Iterable, Collection, List, RandomAccess等接口。可以用于保存不限长度的数组元素,
ArrayList常用的方法有:add、clear、contains、get、isEmpty、remove、size等。
add(参数):将指定的元素添加到此列表的尾部。
clear():移除此列表中的所有元素。
contains(参数):如果此列表中包含指定的元素,则返回 true。
get(参数):返回此列表中指定位置上的元素。
isEmpty():如果此列表中没有元素,则返回 true。
remove(参数):移除此列表中指定位置上的元素。
size():返回此列表中的元素数。