小谈一下java数组

数组是存放数据的容器,有两个特点:元素类型唯一,长度固定。

一维数组声明:类型[] 数组名;类型 数组名[];推荐用前一种。

多维数组声明同样是以上要求。

在数组创建时,要注意一下几点:

1).数组对象一旦创建,其大小不能更改,所以创建数组是要给予适当的长度,对这一点还是有解决余地的,毕竟代码是自己的;

2).数组的下表是从0开始的,下表的范围从到数组的长度-1

3).数组中的元素是通过数组名和数组下标来确定的。

数组的初始化分为静态初始化(不能指定长度)和动态初始化(必须指定长度)两种:

如一维数组初始化:int[] a = new int[3]; int[] a = new int[]{1,2,3}注意后一种的[]中不可以填值;

多维数组的初始化:int[][] a = new int [3][3]; int[][] a = new int[3][];int[][] a = new int[][]{{1},{1,2},{1,2,3}};注意后两种格式[]中不可再填值。

从另一个角度说数组的初始化分为:

1).默认初始化:不论数组是什么类型的数组,从创建开始,系统便会默认为其每个元素赋初值。对于基本类型的默认值,这一点以前说过,现在再细说一下吧,对于boolean类型的为false,其他类型的都相应的0。具体的是byte,short,int默认为0long默认为0Ldouble默认为0.0float默认为0.0Fchar默认为\u0000String的默认值为null

2).赋值初始化:当要为数组元素赋值,但又具有明显的规律时,则可以利用循环语句对其初始化。在对数组进行循环式,限制条件一般都与其length属性相关,这样一定不会越界;在对数组进行赋值时最好不要使用具体数值,因为在具体的数值既容易出错,可维护性又差,一旦数组长度改变,那么就要修改多行代码,所以还是建议用数组名.length吧。

3).枚举初始化:如果数组元素需要的初始值与默认值不同,但又没有明显的规律且数量又不多,这是就可采用枚举初始化,如上面的int[] a = new int[]{1,8,4,3}

数组赋值的规则如下:*数组的维数要相同,*数组元素的类型要相同,*对于数组而言不存在数据类型转换。

Java有其输入的方式:下面说一下基本的输入方法

Scanner为输入扫描类,基本用法如下代码所示:

package practice;
import java.util.Scanner;
public class TestScanner {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//可输入多种数据类型
int i = scan.nextInt();
String s = scan.next();
boolean b = scan.nextBoolean();
double d = scan.nextDouble();
System.out.println("int:"+i+" Sring:"+s+" boolean"+b+" double:"+d);
}
}

输出如下:

1
maidou
true
1.1
int:1 Sring:maidou booleantrue double:1.1

下面说一下测试数组常用的方法吧:

Arrays.copyOfRange(参数,参数,参数):将指定数组的指定范围复制到一个新的数组

Arrays.copyOf(参数,参数):复制指定的数组,截取或用0填充,使副本具有指定的长度

Arrays.sort(参数):对指定int型数组的指定范围按数字升序进行排序

Arrays.binarySearch(参数,参数):二分法查找指定的int型数组,以获得指定的值,但其必须在排完序的基础上,也就是在sort调用完再用二分法来查找

Arrays.toString():方法提供了数组的格式化输出方式,一般在调用时需要重写此方法

System.arraycopy(src,srcPos,dest,destPos.length):src-原数组 srcPos-原数组的起始位置dest-目标数组 destPos-目标数组的起始位置 length-要拷贝的数组元素个数

Arrays工具类的使用与后来集合中的Collections相似,这一点在集合中再说吧!

下面看一下代码吧:

package practice;
import java.util.Arrays;
public class TestArrays {
public static void main(String[] args) {
int[] a = new int[]{1,3,5,7,9,2,4,6,8,10};
int[] b = Arrays.copyOf(a, a.length);
int[] c = Arrays.copyOfRange(a, 2, 5);//前闭后开
System.out.println("Arrays.copyOf()方法 "+Arrays.toString(b));
System.out.println("copyOf方法常见了一个新的地址 "+(a == b));//copyOf()方法创建了一个新的内存空间
System.out.println("Arrays.copyOfRange方法 "+Arrays.toString(c));
Arrays.sort(a);
for(int i : a){
System.out.print(i+" ");//排序后的数组依次输出每个元素
}
System.out.println();
System.out.println("Arrays.toString()方法 "+Arrays.toString(a));
int pos = Arrays.binarySearch(a, 5);
System.out.println("Arrays.binarySearch方法 "+pos);
int[] d = new int[6];
System.arraycopy(a, 0, d, 1, 5);
System.out.println("System.arraycopy方法 "+Arrays.toString(d));
}
}

输出如下所示:

Arrays.copyOf()方法 [1, 3, 5, 7, 9, 2, 4, 6, 8, 10]
copyOf方法常见了一个新的地址 false
Arrays.copyOfRange方法 [5, 7, 9]
1 2 3 4 5 6 7 8 9 10
Arrays.toString()方法 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Arrays.binarySearch方法 4
System.arraycopy方法 [0, 1, 2, 3, 4, 5]

好啦,数组就先到这里吧,接下来会讲一下面向对象的三大特^-^!