LinkedList
LinkedList 是一個(gè)鏈表結(jié)構(gòu)讯檐,可當(dāng)作堆棧羡疗、隊(duì)列、雙端隊(duì)列 别洪。鏈表是一種在物理上非連續(xù)叨恨、非順序的數(shù)據(jù)結(jié)構(gòu),由若干節(jié)點(diǎn)(node)所組成挖垛。
單鏈表
圖2.png
單向鏈表的每一個(gè)節(jié)點(diǎn)包含兩部分痒钝,一部分是存放數(shù)據(jù)的變量data,另一部分是指向下一個(gè)節(jié)點(diǎn)的指針next晕换。正如地下黨的聯(lián)絡(luò)方式午乓,一級一級,單線傳遞:
private static class Node {
int data;
Node next;
}
雙鏈表
雙向鏈表比單向鏈表稍微復(fù)雜一些闸准,它的每一個(gè)節(jié)點(diǎn)除了擁有data和next指針,還擁有指向前置節(jié)點(diǎn)的prev指針
圖3.png
和數(shù)組不同梢灭,鏈表存儲數(shù)據(jù)的時(shí)候夷家,則采用了見縫插針的方式,鏈表的每一個(gè)節(jié)點(diǎn)分布在內(nèi)存的不同位置敏释,依靠next指針關(guān)聯(lián)起來库快。這樣可以靈活有效地利用零散的碎片空間。
圖4.png
LinkedList 做數(shù)據(jù)的添加和刪除操作時(shí)速度很快钥顽,但是做查詢的時(shí)候速度就很慢义屏,這和 ArrayList 剛好相反。
適用 LinkedList 獨(dú)有的方法蜂大,在集合前后做數(shù)據(jù)插入
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>();
list.add(123);
// 添加相同的數(shù)據(jù)
list.add(123);
list.add(456);
list.add(789);
list.add(101);
// 將數(shù)據(jù) 111 添加到 list 的末尾
list.addLast(111);
// 將數(shù)據(jù) 999 添加到 list的最前面
list.addFirst(999);
for (int i = 0; i < list.size(); i++) {
System.out.println( list.get(i) );
}
}
注意: 代碼中聲明和實(shí)現(xiàn)都是 LinkedList 闽铐, 如果聲明的是 List 接口 , addFirst 和 addLast 方法是不可見的