數學上,序列是被排成一列的物件(或事件);這樣,每個元素不是在其他元素之前,就是在其他元素之後。這裡,元素之間的順序非常重要。容量是乙個很需要平衡的數值。
我們以list的實現類arraylist為例,觀察一下容量的增長。
arraylist預設的是10,如果我們改小成1,將會發現我們除了第乙個不需要增加容量,
每增加乙個 我們都需要進行擴容陣列
public boolean add(e e)
private void ensurecapacityinternal(int mincapacity)
private void grow(int mincapacity)
重點在這裡
elementdata = arrays.copyof(elementdata, newcapacity);
所以我們在應用該類的時候,要特別注意儲存之前的準備工作,我們可以提前做好容量的規劃,然後改變預設值,間接也提公升了我們**的效率。
我們觀察了幾種列表,發現基於陣列的序列,資料結構最簡單,我們應該首先考慮使用該類,linkedlist的資料結構是多個節點連線,每個節點都有兩個指標,乙個指向上乙個節點,乙個
指向下乙個節點。
我們做了乙個試驗,
list list = new arraylist();
long begin = system.currenttimemillis();
for(int i= 0;i<1000000;i++)
system.out.println(system.currenttimemillis() - begin);
linkedlistlist = new linkedlist();
long begin = system.currenttimemillis();
for(int i= 0;i<1000000;i++)
system.out.println(system.currenttimemillis() - begin);
所消耗的時間差了一倍,
兩者唯一相像的地方是刪除元素後,都是真實的空間容量大小。
vector 的預設空間是10,vector的大小可以根據需要增大或縮小,以適應建立 vector 後進行新增或移除項的操作。 這裡所說的大小是實際元素的大小,而不是空間的大小。
我們做個試驗
myvectorve = new myvector();
ve.add("1");
ve.add("2");
ve.add("3");
ve.add("4");
ve.add("5");
ve.add("6");
ve.add("7");
ve.add("8");
ve.add("9");
ve.add("10");
ve.add("11");
ve.remove(3);
在刪除索引為3的列之後,整個vector實際元素為
1 2 3 5 6 7 8 9 10 11,而且被刪除元素的位置都被直接填充了,後面的所有元素直接向前移。
這個向前異動的操作,使用了system.arraycopy(elementdata, index+1, elementdata, index,nummoved);
我們觀察了一下,整個資料空間沒有發生改變,容量都是20,但實際的元素由11變成10了。
java基礎 序列與並行
有兩種執行程式的方法。一種是順序執行,另一程是併發執行。所謂順序執行就是指程式中的程式段必須按照先後順序來執行,也就是只有前面的程式段執行完了,後面的程式段才能執行。這種做法極大地浪費了 cpu資源,比如系統中有乙個程式在等待 i o輸入,那麼 cpu除了等待就不能做任何事情了。為了提高 cpu的使...
Java基礎系列(5) 序列化
序列化可以將任意物件寫出到流中,並在之後將其讀回。可以使用序列化將物件持久化到磁碟,等到使用時再讀出來,可以節省記憶體。可以通過網路傳遞物件。想要乙個類生成的物件可以被序列化,必須實現serializable介面 public class book implements serializable p...
什麼是java序列化,如何實現java序列化?
序列化 處理物件流的機制,所謂物件流也就是將物件的內容進行流化。可以對流化後的物件進行讀寫操作,也可將流化後的物件傳輸於網路之間。序列化是為了解決在對物件流進行讀寫操作時所引發的問題。序列化的實現 將需要被序列化的類實現serializable介面,該介面沒有需要實現的方法,implements s...