java 中鏈表的定義與使用方法
更新時間:2017年03月24日 17:14:31 作者:湖春
這篇文章主要介紹了java 中鏈表的定義與使用方法的相關(guān)資料,需要的朋友可以參考下
java 中鏈表的定義與使用方法
Java實現(xiàn)鏈表主要依靠引用傳遞,引用可以理解為地址,鏈表的遍歷多使用遞歸,這里我存在一個疑問同一個類的不同對象的的相同方法的方法內(nèi)調(diào)用算不算遞歸.
這里我寫的是單向鏈表;
實例代碼:
package com.example.java; public class MyLink { public static void main(String [] args){ Link l=new Link(); mytype[] la; mytype dsome=new mytype("韓敏","dsome",21); mytype shao=new mytype("邵曉","john",45); mytype hua=new mytype("華曉風(fēng)","jam",46); mytype duo=new mytype("余小風(fēng)","duo",1000); mytype wang=new mytype("王秋","jack",21); mytype shi=new mytype("韓寒","bob",3000); mytype yu=new mytype("于冬","keven",30); l.add(dsome);//測試增加節(jié)點 l.add(shao); l.add(hua); l.add(wang); l.add(shi); l.add(duo); l.add(yu); System.out.println("鏈表長度:"+l.length());//鏈表長度 la=l.toArray(); for(int i=0;i<la.length;i++){ System.out.println(la[i].getInfo()); } System.out.println("是否包含多余:"+l.contains(duo)+"\n"); System.out.println("刪除多余后\n"); l.remove(duo); la=l.toArray(); for(int i=0;i<la.length;i++){//轉(zhuǎn)化為數(shù)組之后輸出 System.out.println(la[i].getInfo()); } System.out.println("\n利用索引方法輸出全部數(shù)據(jù)"); for(int i=0;i<l.length();i++){ System.out.println(l.get(i).getInfo()); } System.out.println("是否包含多余:"+l.contains(duo)+"\n"); l.clean(); System.out.println("執(zhí)行清空操作后鏈表長度: "+l.length()+"\t是否為空鏈表:"+l.isEmpty()); } } package com.example.java; public class Link { private class Node{//內(nèi)部類 private Node next; private mytype data; public Node(mytype data){ this.data=data; } public void addNode(Node newNode){//增加節(jié)點 if(this.next==null){ this.next=newNode; }else{ this.next.addNode(newNode); } } public mytype getNode(int index){//按照角標(biāo)返回數(shù)據(jù) if(index==Link.this.foot++){ return this.data; }else{ return this.next.getNode(index); } } public boolean iscontain(mytype data){//判斷是否含有該數(shù)據(jù) if(this.data.equals(data)){ return true; }else{ if(this.next!=null){ return this.next.iscontain(data); }else{ return false; } } } public void removeNode(Node previous,mytype data){//刪除節(jié)點 if(this.data.equals(data)){ previous.next=this.next; }else{ this.next.removeNode(this,data); } } public void toArrayNode(){//轉(zhuǎn)化數(shù)組 Link.this.Larray[Link.this.foot ++]=this.data; if(this.next!=null){ this.next.toArrayNode(); } } } //內(nèi)部類定義完畢 private Node root; private int count=0; private int foot; private mytype [] Larray; public void add(mytype data){//增加節(jié)點 if(data==null){ System.out.print("增加數(shù)據(jù)失敗,數(shù)據(jù)為空");//測試用 return; } Node newNode=new Node(data); if(this.root==null){ this.root=newNode; this.count++; }else{ this.root.addNode(newNode); this.count++; } } public int length(){//鏈表長度 return this.count; } public boolean isEmpty(){//是否為空鏈表 if(this.count==0)return true; else return false; } public void clean(){//清空鏈表 this.root=null; this.count=0; } public mytype get(int index){//索引返回節(jié)點所存的數(shù)據(jù) if(index>=this.count||index<0){ System.out.print("越界錯誤");//測試用 return null; }else{ this.foot=0; return this.root.getNode(index); } } public boolean contains(mytype data){//判斷鏈表數(shù)據(jù)是否含data if(data==null) return false; return this.root.iscontain(data); } public void remove(mytype data){//刪除指定數(shù)據(jù)節(jié)點 if(this.contains(data)){ if(this.root.data.equals(data)){ this.root=this.root.next; this.count--; } else{ this.count--; this.root.next.removeNode(root,data); } }else{ System.out.print("刪除錯誤");//測試用 } } public mytype[] toArray(){//把鏈表轉(zhuǎn)化成對象數(shù)組 if(this.count==0){ return null; } this.foot=0; this.Larray=new mytype [this.count]; this.root.toArrayNode(); return this.Larray; } } package com.example.java; public class mytype { private String name; private String people; private int age; public mytype(String name,String people,int age){//鏈表中的數(shù)據(jù)(可自定義) this.name=name; this.people=people; this.age=age; } public boolean equals(mytype data){//判斷數(shù)據(jù)是否相同 if(this==data){ return true; } if(data==null){ return false; } if(this.name.equals(data.name)&&this.people.equals(data.people)&&this.age==data.age){ return true; }else{ return false; } } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPeople() { return people; } public void setPeople(String people) { this.people = people; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getInfo(){ return "名字 :"+this.name+"\n"+ "人物 :"+this.people+"\n"+ "年齡 :"+this.age; } }
測試效果如下:
鏈表長度:7 名字 :韓敏 人物 :dsome 年齡 :21 名字 :邵曉 人物 :john 年齡 :45 名字 :華曉風(fēng) 人物 :jam 年齡 :46 名字 :王秋 人物 :jack 年齡 :21 名字 :韓寒 人物 :bob 年齡 :3000 名字 :余小風(fēng) 人物 :duo 年齡 :1000 名字 :于冬 人物 :keven 年齡 :30 是否包含多余:true 刪除多余后 名字 :韓敏 人物 :dsome 年齡 :21 名字 :邵曉 人物 :john 年齡 :45 名字 :華曉風(fēng) 人物 :jam 年齡 :46 名字 :王秋 人物 :jack 年齡 :21 名字 :韓寒 人物 :bob 年齡 :3000 名字 :于冬 人物 :keven 年齡 :30 利用索引方法輸出全部數(shù)據(jù) 名字 :韓敏 人物 :dsome 年齡 :21 名字 :邵曉 人物 :john 年齡 :45 名字 :華曉風(fēng) 人物 :jam 年齡 :46 名字 :王秋 人物 :jack 年齡 :21 名字 :韓寒 人物 :bob 年齡 :3000 名字 :于冬 人物 :keven 年齡 :30 是否包含多余:false 執(zhí)行清空操作后鏈表長度: 0 是否為空鏈表:true
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
java 使用URLDecoder和URLEncoder對中文進(jìn)行處理
這篇文章主要介紹了java 使用URLDecoder和URLEncoder對中文進(jìn)行處理的相關(guān)資料,需要的朋友可以參考下2017-02-02Linux環(huán)境卸載Centos7自帶的OpenJDK和安裝JDK1.8圖文教程
CentOS系統(tǒng)是開發(fā)者常用的Linux操作系統(tǒng),安裝它時會默認(rèn)安裝自帶的舊版本的OpenJDK,但在開發(fā)者平時開發(fā)Java項目時還是需要完整的JDK,這篇文章主要給大家介紹了關(guān)于Linux環(huán)境卸載Centos7自帶的OpenJDK和安裝JDK1.8的相關(guān)資料,需要的朋友可以參考下2024-07-07Spring\SpringBoot配置連接數(shù)據(jù)庫的方法
最近在學(xué)習(xí)SpringBoot,第一步就是要配置數(shù)據(jù)庫,本文詳細(xì)的介紹了Spring\SpringBoot配置連接數(shù)據(jù)庫的方法,有需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-06-06Java操作redis設(shè)置第二天凌晨過期的解決方案
這篇文章主要介紹了Java操作redis設(shè)置第二天凌晨過期的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01Java實現(xiàn)學(xué)生成績輸出到磁盤文件的方法詳解
這篇文章主要為大家詳細(xì)介紹了如何利用Java實現(xiàn)將學(xué)生成績輸出到磁盤文件的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-11-11