java基礎 序列

2021-09-01 19:05:13 字數 1662 閱讀 7352

數學上,序列是被排成一列的物件(或事件);這樣,每個元素不是在其他元素之前,就是在其他元素之後。這裡,元素之間的順序非常重要。容量是乙個很需要平衡的數值。

我們以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...