1. 程式人生 > >解決android for迴圈中建立物件問題

解決android for迴圈中建立物件問題

         最近碰到一個特別棘手的問題,一個醫療的專案,胎心監護的,需要從後臺獲取特別多的資料,進行折線圖的繪製。硬體廠家提供了一個方案,他們提供的資料介面需要在for迴圈中建立物件,一般來講,在for迴圈中建立物件,如果是數量比較水就不需要計較了,關鍵是這次需要建立幾萬個,這樣就出問題了,沒有辦法在迴圈幾萬次,建立幾萬個物件,這是非常不靠譜的,也是非常耗費資源的,那怎麼優化呢?

        比如下面一個常見的person類,我們需要整合cloneable,讓我們在建立物件 到時候使用克隆方式,以便節約資源及時間

public class Person implements Cloneable {
    String name;
    int age;
   static Person person = new Person();

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Person() {

    }

    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 static Person getPerson() {
        try {
            return (Person) person.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

使用方式

public class Test {

    private static final String TAG = "Test";

    public static void main(String args[]){
         List<Person> list1=new ArrayList<>();
         List<Person> list2=new ArrayList<>();
       //測試分別用for迴圈方式建立物件,與使用clone建立物件的兩種方式所花費的時間長短
        long start1=System.currentTimeMillis();
        for (int i = 0; i <3000000 ; i++) {
            Person person=new Person("張三"+i,i);
            list1.add(person);
        }
        System.out.println("採用for迴圈花費時間---"+(System.currentTimeMillis()-start1)+"-----列印一個物件資料"+list1.get(10000).toString());


        long start2=System.currentTimeMillis();
        for (int i = 0; i <3000000 ; i++) {
            Person person=Person.getPerson();
            list2.add(person);
        }
        System.out.println("採用clone迴圈花費時間---"+(System.currentTimeMillis()-start2)+"-----列印一個物件資料"+list1.get(10000).toString());
    }
}

輸出結果

採用for迴圈花費時間---2515-----列印一個物件資料Person{name='張三10000', age=10000}
採用clone迴圈花費時間---86-----列印一個物件資料Person{name='張三10000', age=10000}

經過測試之後發現,經過clone方式來複用物件,能夠大量的節約時間,至於clone模式更多原理,請大家自行搜尋相關資料學習。