基本數據類型數組的擴容和縮容:
package test; /** * 實現基本數據類型數組的擴容和縮容 * @author admin * */ /*因為java中數組是固定的,不變是不能動態擴容的, 想要插入一個數必然要重新創建一個數組,其長度比原數組大, 然后對其進行拷貝,接下來要做的工作就是在新數組里面實現插入。*/ public class ArrayTest { public static void main(String[] args) { // TODO Auto-generated method stub //定義一個長度為5的普通數組 int[] arr ={5,1,4,2,6}; System.out.print("擴容前的數組:"); for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+" "); } System.out.println(); //定義一個新的數組,長度為當前數組的長度加一 int[] temp1 = new int[arr.length+1]; //通過循環將當前數組的值賦給臨時數組 for(int i=0;i<arr.length;i++){ temp1[i] = arr[i]; } //將需要添加的值添加到臨時數組的最后以為,即temp.length-1 temp1[temp1.length-1] = 0; //最后將臨時數組的值賦給當前數組 arr = temp1; //最后將數組打印一遍,看添加是否成功 System.out.print("擴容后的數組:"); for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+" "); } System.out.println(); //接下來就是數組的縮容 //還是使用當前數組arr ,因為前面擴容的原因,它現在的長度為6 System.out.print("縮容前的數組:"); for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+" "); } System.out.println(); //先定義一個臨時數組,長度比arr要小一 int[] temp2 = new int[arr.length-1]; //加入你現在需要去掉數組下標為3的值 for(int i=0; i<temp2.length;i++){ //先判斷數組下標的值,如果小於將於去掉值的下標則將arr數組的值賦給temp2, //一旦不滿足條件后,temp2的當前下標值獲取arr數組的下一個下標值 if(i<3){ temp2[i] = arr[i]; }else{ temp2[i] = arr[i+1]; } } arr = temp2; //最后將數組打印一遍,看添加是否成功 System.out.print("縮容后的數組:"); for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+" "); } } }
輸出結果:
擴容前的數組:5 1 4 2 6
擴容后的數組:5 1 4 2 6 0
縮容前的數組:5 1 4 2 6 0
縮容后的數組:5 1 4 6 0
然后是對象數組的擴容和縮容:
package test; /** * 對象數組的擴容和縮容 * @author admin * */ public class ObjectArray { public static void main(String[] args) { // TODO Auto-generated method stub Data data = new Data(); Student[] stu = data.setData(); System.out.println("數組擴容前打印輸出:"); for(int i=0;i<stu.length;i++){ System.out.println(stu[i].getName()+"\t"+stu[i].getAge()+"\t"+stu[i].getGender()); } //對象數組的擴容 Student[] temp1 = new Student[stu.length+1]; //與普通數組擴容大致步驟相同 for(int i=0;i<stu.length;i++){ temp1[i] = stu[i]; } //創建需要加入對象數組的數據,並將其插入臨時獨享數組最后一位 Student stu2 = new Student(); stu2.setName("小王"); stu2.setAge(18); stu2.setGender("男"); //不能給對象數組的最后一位單獨賦值,因為最后一位開始只是申明的這個對象並沒有具體的指向地址,直接賦值會產生空指針錯誤 temp1[temp1.length-1] = stu2; //將temp1的值賦給原對象數組 stu = temp1; System.out.println("數組擴容后打印輸出:"); for(int i=0;i<stu.length;i++){ System.out.println(stu[i].getName()+"\t"+stu[i].getAge()+"\t"+stu[i].getGender()); } //對象數組的縮容 System.out.println("數組縮容前打印輸出:"); for(int i=0;i<stu.length;i++){ System.out.println(stu[i].getName()+"\t"+stu[i].getAge()+"\t"+stu[i].getGender()); } //創建一個Student對象數組,長度為stu對象數組長度減一 Student[] temp2 = new Student[stu.length-1]; //對象數組的縮容與普通數組並沒有什么差別 //這次是需要去掉數組下標為2的值 ////從下標2開始,后面一位往前移動一位 for(int i=2;i<stu.length-1;i++){ stu[i] = stu[i+1]; } //將當前對象數組前temp2的長度位的值賦給temp2,也就這stu的最后一個值並不賦給temp2數組 for(int i=0;i<temp2.length;i++){ temp2[i] = stu[i]; } //將temp2的值賦給原對象數組 stu = temp2; System.out.println("數組縮容后打印輸出:"); for(int i=0;i<stu.length;i++){ System.out.println(stu[i].getName()+"\t"+stu[i].getAge()+"\t"+stu[i].getGender()); } } } class Student{ private String name; private int age; private String gender; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } } class Data{ /** * 返回Student類型的對象數組 * @return stu[] */ public Student[] setData(){ //創建對象並賦值 Student stu1 = new Student(); stu1.setName("張三"); stu1.setAge(18); stu1.setGender("男"); Student stu2 = new Student(); stu2.setName("李四"); stu2.setAge(17); stu2.setGender("男"); Student stu3 = new Student(); stu3.setName("小琴"); stu3.setAge(18); stu3.setGender("女"); //將對象的值添加進入對象數組中 Student[] stu = new Student[3]; stu[0] = stu1; stu[1] = stu2; stu[2] = stu3; return stu; } }
結果為:
數組擴容前打印輸出:
張三 18 男
李四 17 男
小琴 18 女
數組擴容后打印輸出:
張三 18 男
李四 17 男
小琴 18 女
小王 18 男
數組縮容前打印輸出:
張三 18 男
李四 17 男
小琴 18 女
小王 18 男
數組縮容后打印輸出:
張三 18 男
李四 17 男
小王 18 男