解決android for迴圈中建立物件問題
阿新 • • 發佈:2018-12-21
最近碰到一個特別棘手的問題,一個醫療的專案,胎心監護的,需要從後臺獲取特別多的資料,進行折線圖的繪製。硬體廠家提供了一個方案,他們提供的資料介面需要在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模式更多原理,請大家自行搜尋相關資料學習。