使用stack實現瀏覽器的頁面的前進後退

2021-09-29 14:36:14 字數 3916 閱讀 9319

//*************************==測試***************************===

public class main 

}

//******************************=stack******************************==

package com.fine.stack;

import com.fine.list;

import com.fine.list.myarraylist;

/** * @description: 後進先出

* @author:

* 介面設計: size 入棧 出棧 清空 獲取棧頂元素 是否為空

*/public class mystack

/*** 出棧

** @return

*/public e pop()

/*** 獲取棧頂元素

*/public e gettop()

/*** 模擬瀏覽器頁面前進、後退、進入新頁面

*/public void go(mystackoldstack, mystacknewstack) else

}public void back(mystackoldstack, mystacknewstack) else

}public void insertnewpage(e element, mystackoldstack, mystacknewstack)

}

//********************===myarraylist*************************=

package com.fine.list;

import com.fine.abstractlist;

@suppresswarnings("unchecked")

public class myarraylistextends abstractlist

public myarraylist(int capacity) else

}/**

* 清除所有元素

*/public void clear()

size = 0;

}/**

* 是否包含某個元素

** @param element

* @return

*/public boolean contains(e element)

}return result;

}/**

* 新增元素到尾部

** @param element

*/public void add(e element) else

}/**

* 在index位置插入乙個元素

* 在指定位置插入,後面位置的元素向後挪動,如果超出了索引範圍就追加在最後面,索引小於0加在最前面

** @param index

* @param element

*/public void addindex(int index, e element)

for (int i = size - 1; i >= index; i--) else

}if (index >= elements.length)

elements[index] = element;

++size;

}/**

* 獲取index位置的元素,訪問時間和下標沒有關係

* 不管取索引是多少的元素複雜度都是o(1),因為底層是直接解析nums[index]算出位址,通過位址去找元素

** @param index

* @return

*/public e get(int index)

/*** 設定index位置的元素

** @param index

* @param element

* @return 原來的元素ֵ

*/public e set(int index, e element)

/*** 刪除index位置的元素

* 刪除乙個元素其實是改為元素的後乙個元素向前覆蓋

** @param index

* @return 成功移除的元素, 失敗拋異常

*/public e remove(int index)

//最後乙個元素

elements[--size] = null;

if (elements.length >> 2 >= size && elements.length > default_capacity) else

return oldele;

}/**

* 縮容

*/private void tirm()

elements = newelements;

system.out.println(oldcapacity + "縮容為" + newcapacity);

}/**

* 檢視元素的索引

** @param element

* @return

*/public int indexof(e element)

} else

}return element_not_found;

}/**

* 保證要有capacity的容量

* 不允許在老陣列後面申請新的記憶體空間,只有重新開闢一塊新空間,把老資料加進去

** @param capacity

*/private void ensurecapacity(int capacity)

//浮點數的計算比整數計算更耗時間,所以這裡不用浮點數計算

//double newcapacitydoub = oldcapacity * 1.5; >>1 = /2 ;<<1 = *2

int newcapacity = oldcapacity + (oldcapacity >> 1);

e newelements = (e) new object[newcapacity];

for (int index = 0; index < size; index++)

elements = newelements;

system.out.println(oldcapacity + "擴容為" + newcapacity);

}@override

public string tostring() else else }}

return new string(sb);

}}

//*************************====abstractlist******************************==

package com.fine;

/** * 抽象類可以不實現介面的方法

* 此類不對外公開,負責封裝公共方法

* @param */

public abstract class abstractlistimplements list

/*** 是否為空

** @return

*/public boolean isempty()

public void outofbounds(int index)

public void rangecheck(int index)

}public void rangecheckforadd(int index)

}}

//*************************===list介面******************************

package com.fine;

public inte***ce list

瀏覽器頁面載入效能

window.performance.timing返回網頁中所有資源和標記的資料 window.performance.getentries 根據entrytype返回資料 window.performance.getentriesbytype window.performance.getentri...

瀏覽器渲染頁面過程

今天在某論壇上看到這麼乙個問題。現在頁面有個空div,我用js向裡面插入一段html,然後獲取div的高度,發現有時候得到的div的高度不準確,請問各位有什麼方法解決一下。那麼為了更好的理解這個問題,咱們今天來聊聊瀏覽器的渲染過程 解析html 解析css 構建render tree 布局 layo...

瀏覽器頁面渲染流程

渲染流水線中css和js的載入 相關概念 html css js資料通過渲染模組的處理最終輸出為螢幕上的畫素 渲染模組被劃分為很多子階段,輸入的資料通過這些子階段最後輸出畫素,這樣的乙個處理流程叫做渲染流水線 注意 每個子階段都有其輸入內容 處理過程和輸出內容 因為瀏覽器無法直接理解和使用html,...