JAVA进阶教学之(单链表数据结构)
什么是鏈表:
內(nèi)存地址不連續(xù),基本單元是節(jié)點(diǎn)對(duì)象Node,單鏈表尾結(jié)點(diǎn)默認(rèn)是null
?
什么是鏈表中的節(jié)點(diǎn):
節(jié)點(diǎn)是單鏈表中的基本單元,每一個(gè)節(jié)點(diǎn)都有兩個(gè)屬性
屬性一:存儲(chǔ)的數(shù)據(jù)
屬性二:下一個(gè)節(jié)點(diǎn)的內(nèi)存地址
?
什么是指針:
一個(gè)內(nèi)存地址就是一個(gè)指針,當(dāng)一個(gè)對(duì)象沒有被指針指向的時(shí)候,對(duì)象會(huì)被垃圾回收機(jī)制回收
?
鏈表的優(yōu)缺點(diǎn)有哪些:
優(yōu)點(diǎn):隨機(jī)增刪元素效率高(因?yàn)榇鎯?chǔ)上內(nèi)存地址不連續(xù),增刪元素不涉及到大量元素位移)
缺點(diǎn):查詢效率低(不能通過(guò)數(shù)學(xué)表達(dá)式計(jì)算被查找元素的內(nèi)存地址,每一次查找每個(gè)元素的時(shí)候都需要從頭結(jié)點(diǎn)開始往下遍歷)
?
JVM示意圖:
?
代碼演示(Link的底層用代碼進(jìn)行演示):并不全面,只是了解即可
第一步:創(chuàng)建一個(gè)Node節(jié)點(diǎn)類
package com.lbj.javase.link;/*** 節(jié)點(diǎn)*/ public class Node {Object data;Node next;public Node() {}public Node(Object data, Node next) {this.data = data;this.next = next;}}第二步:創(chuàng)建一個(gè)Link鏈表類,類中提供調(diào)用方法
package com.lbj.javase.link;/*** @author LBJ* @version V1.0* @Package com.lbj.javase.link* @date 2021/4/3 17:45* @Copyright 公司*/ public class Link {//鏈表的頭結(jié)點(diǎn),默認(rèn)值就是nullNode next;//這段用來(lái)統(tǒng)計(jì)Link內(nèi)元素的長(zhǎng)度int size=0;public int size(){return size;}//向鏈表中添加元素的方法public void add(Object o){//創(chuàng)建一個(gè)節(jié)點(diǎn)對(duì)象//讓之前單鏈表的末尾節(jié)點(diǎn)next指向新節(jié)點(diǎn)對(duì)象//有可能這個(gè)元素是第一個(gè),也可能是第二個(gè),第三個(gè)if(next==null){//說(shuō)明還沒有節(jié)點(diǎn)//new一個(gè)新的節(jié)點(diǎn)對(duì)象,作為頭結(jié)點(diǎn)//這個(gè)時(shí)候的節(jié)點(diǎn),既是一個(gè)頭結(jié)點(diǎn),又是一個(gè)末尾節(jié)點(diǎn)next=new Node(o,null);}else {//說(shuō)明頭結(jié)點(diǎn)已經(jīng)存在了//找到當(dāng)前末尾節(jié)點(diǎn),讓當(dāng)前末尾節(jié)點(diǎn)的next是新節(jié)點(diǎn)Node currentLastNode=findLast(next);currentLastNode.next=new Node(o,null);}size++;}private Node findLast(Node node) {if(node.next==null){return node;}return findLast(node.next);//遞歸算法}//向鏈表中刪除元素的方法public void remove(Object o){}//向鏈表中修改元素的方法public void modify(Object newObj){}//向鏈表中... }第三步:測(cè)試調(diào)用鏈表的方法進(jìn)行鏈表元素添加
package com.lbj.javase.link;public class Test {public static void main(String[] args) {//創(chuàng)建一個(gè)新的鏈表Link link=new Link();//往鏈表內(nèi)添加元素link.add(100);link.add(200);link.add(300);System.out.println(link.size());} } //3?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的JAVA进阶教学之(单链表数据结构)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C++为什么空格无法输出_OOP 面向对
- 下一篇: 机器学习如何计算特征的重要性_机器学习之