之所以对数组做一个总结,是因为当初自己在学习Java的时候,对数组、容器等等问题最为忌惮,抛错也是最多的。所以趁我还清醒的时候,赶紧做一下数组的整理吧。以下是一个完整的类,用main方法对数组的一些方法做了测试。 package test; import java.util.Arrays; public class Test { public static void main(String[] args){ /*--------------数组的定义--------------------*/ //The first method to create an array String[] s1;//只是定义了一个指向String数组的数组对象,并没有为其分配内存,如果此时编译会报错 s1 = new String[10];//此时才真正的为该数组对象分配了10个内存空间,但初始值都为null for(int i=0;i<s1.length;i++){ //此时为数组对象中的每一个对象赋值 s1[i] = new String("Array" + (new Integer(i).toString())); } for(int i=0;i<s1.length;i++){ System.out.println(s1[i]); } //The second method to create an array String[] s2 = new String[10]; for(int i=0;i<s1.length;i++){ s2[i] = new String("Array" + (new Integer(i).toString())); } //The third method to create an array //这种创建数组的方法很特殊,它在申明的时候就已经给每个数组对象赋值,并且数组的大小是由创建了多少个String对象来决定的 String[] s3 = {new String(),new String(),new String()}; /*---------------数组的fill方法--------------------*/ String[] s4 = new String[10]; //第一个参数是要填充的数组,第二个参数是要填充的值(或对象) //所以填充也就是给数组对象的每个对象“统一”赋值 Arrays.fill(s4,new String("testArray")); for(int i=0;i<s4.length;i++){ System.out.println(s4[i]); } String[] s5 = new String[10]; //与上一种fill方法不同的是,多了两个参数 //1,4参数是一样的,不同的知识2,3两个参数 //第二个参数的位置上是0,意味着从第零个数组对象开始填充,一直填充到第三个参数的长度 Arrays.fill(s5, 0, s5.length, new String("testArray")); /*---------------数组的比较方法--------------------*/ String[] s6 = new String[10]; String[] s7 = new String[10]; System.out.println(s6 == s7);//这里比较的是对象在内存中的位置,即引用的对象,当然不相同 //数组其实就是一个继承于Object的类,它拥有Object所有的公开的方法 //所以自然拥有equals()的方法,而继承下来的equals()默认就是比较对象引用的 System.out.println(s6.equals(s7)); //下面我们来用Arrays的equals()方法来比较数组 System.out.println(Arrays.equals(s6, s7)); //结果令人很意外,我们来看看该方法的内部操作吧 // //Arrays.equals()符合:只要两个数组的长度和每个值都相等,就称为两个相等的数组 // public static boolean equals(Arrays[] o1,Arrays[] o2){ // if(o1.length == o2.length){ // for(int i=0;i<o1.length;i++){ // if(o1[i] != o2[i]){ // return false; // } // } // return true; // } // // return false; // } /*---------------数组的复制---------------------*/ String[] s8 = new String[20]; String[] s9 = new String[20]; for(int i=0;i<s8.length;i++){ s8[i] = new String("testArray" + (new Integer(i)).toString()); s9[i] = new String("testArray" + (new Integer(i + 100)).toString()); System.out.print(s9[i] + " "); if(i == s8.length-1){ System.out.println(); } } //第一个参数:拷贝源数组 //第二个参数:拷贝源数组的起始拷贝位置 //第三个参数:拷贝目的数组 //第四个参数:拷贝目的数组的起始拷贝位置 //第五个参数:要拷贝的元素个数(注意数组越界问题) System.arraycopy(s8, 0, s9, 10, 10); for(int i=0;i<s9.length;i++){ System.out.print(s9[i] + " "); } /*---------------数组的查找---------------------*/ String[] s10 = new String[10]; for(int i=0;i<s10.length;i++){ s10[i] = new String("test"); } Arrays.sort(s10); System.out.println("/"test/"在数组s10中的下标是" + Arrays.binarySearch(s10, "test") + "/n其值是" + s10[Arrays.binarySearch(s10, "test")]); //注意:如果你要查找的值,在数组中存在多个时,你在使用binarySearch()之前必须对其进行排序 // 如果不然,结果不可预料,也就是你所找到的位置不一定的数组中第一次出现的该值位置. } //Arrays.equals()符合:只要两个数组的长度和每个值都相等,就称为两个相等的数组 public static boolean equals(Arrays[] o1,Arrays[] o2){ if(o1.length == o2.length){ for(int i=0;i<o1.length;i++){ if(o1[i] != o2[i]){ return false; } } return true; } return false; } }