小谈一下java数组
数组是存放数据的容器,有两个特点:元素类型唯一,长度固定。
一维数组声明:类型[] 数组名;类型 数组名[];推荐用前一种。
多维数组声明同样是以上要求。
在数组创建时,要注意一下几点:
1).数组对象一旦创建,其大小不能更改,所以创建数组是要给予适当的长度,对这一点还是有解决余地的,毕竟代码是自己的;
2).数组的下表是从0开始的,下表的范围从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默认为0;long默认为0L;double默认为0.0;float默认为0.0F;char默认为’\u0000’;String的默认值为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]
好啦,数组就先到这里吧,接下来会讲一下面向对象的三大特^-^!