關於數組的擴容


基本數據類型數組的擴容和縮容:

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 男


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM