java 中链表的定义与使用方法

 更新时间:2017年03月24日 17:14:31   作者:湖春  
这篇文章主要介绍了java 中链表的定义与使用方法的相关资料,需要的朋友可以参考下

java 中链表的定义与使用方法

Java实现链表主要依靠引用传递,引用可以理解为地址,链表的遍历多使用递归,这里我存在一个疑问同一个类的不同对象的的相同方法的方法内调用算不算递归.

这里我写的是单向链表;

实例代码:

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("华晓风","jam",46); 
  mytype duo=new mytype("余小风","duo",1000); 
  mytype wang=new mytype("王秋","jack",21); 
  mytype shi=new mytype("韩寒","bob",3000); 
  mytype yu=new mytype("于冬","keven",30); 

l.add(dsome);//测试增加节点 
  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++){//转化为数组之后输出 
   System.out.println(la[i].getInfo()); 
  }  
System.out.println("\n利用索引方法输出全部数据"); 
  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("执行清空操作后链表长度: "+l.length()+"\t是否为空链表:"+l.isEmpty()); 
}
}


package com.example.java;
public class Link {

private class Node{//内部类 
private Node next; 
private mytype data; 
public Node(mytype data){ 
   this.data=data; 
 } 

public void addNode(Node newNode){//增加节点 
   if(this.next==null){ 
    this.next=newNode; 
   }else{ 
    this.next.addNode(newNode); 
   } 
  } 

  public mytype getNode(int index){//按照角标返回数据 

   if(index==Link.this.foot++){ 
    return this.data; 
   }else{ 
    return this.next.getNode(index); 
   } 
  } 

  public boolean iscontain(mytype data){//判断是否含有该数据 
   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){//删除节点 
   if(this.data.equals(data)){ 
    previous.next=this.next; 

   }else{ 
    this.next.removeNode(this,data); 
   } 
  } 


  public void toArrayNode(){//转化数组 
    Link.this.Larray[Link.this.foot ++]=this.data; 
    if(this.next!=null){ 
     this.next.toArrayNode(); 
    } 
   }  
}

//内部类定义完毕 
private Node root; 
private int count=0; 
private int foot; 
private mytype [] Larray;

public void add(mytype data){//增加节点 
  if(data==null){ 
   System.out.print("增加数据失败,数据为空");//测试用 
   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){//索引返回节点所存的数据 
    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){//判断链表数据是否含data 
    if(data==null) 
     return false; 
    return this.root.iscontain(data); 
   } 

   public void remove(mytype data){//删除指定数据节点 
    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(){//把链表转化成对象数组 
    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){//链表中的数据(可自定义) 
  this.name=name; 
  this.people=people; 
  this.age=age; 
 } 
 public boolean equals(mytype data){//判断数据是否相同 
  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 
名字 :华晓风 
人物 :jam 
年龄 :46 
名字 :王秋 
人物 :jack 
年龄 :21 
名字 :韩寒 
人物 :bob 
年龄 :3000 
名字 :余小风 
人物 :duo 
年龄 :1000 
名字 :于冬 
人物 :keven 
年龄 :30 
是否包含多余:true

删除多余后

名字 :韩敏 
人物 :dsome 
年龄 :21 
名字 :邵晓 
人物 :john 
年龄 :45 
名字 :华晓风 
人物 :jam 
年龄 :46 
名字 :王秋 
人物 :jack 
年龄 :21 
名字 :韩寒 
人物 :bob 
年龄 :3000 
名字 :于冬 
人物 :keven 
年龄 :30

利用索引方法输出全部数据 
名字 :韩敏 
人物 :dsome 
年龄 :21 
名字 :邵晓 
人物 :john 
年龄 :45 
名字 :华晓风 
人物 :jam 
年龄 :46 
名字 :王秋 
人物 :jack 
年龄 :21 
名字 :韩寒 
人物 :bob 
年龄 :3000 
名字 :于冬 
人物 :keven 
年龄 :30 
是否包含多余:false

执行清空操作后链表长度: 0 是否为空链表:true

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • SpringBoot部署在Weblogic的操作步骤

    SpringBoot部署在Weblogic的操作步骤

    这篇文章主要介绍了SpringBoot部署在Weblogic的操作步骤,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java中判断集合是否相等的几种方法详解

    Java中判断集合是否相等的几种方法详解

    这篇文章主要介绍了Java中判断集合是否相等的几种方法详解,在平时的开发中,可能会遇到需要判断两个集合是否相等的需求,那么本文就来详细讲解一下几种实现方法,需要的朋友可以参考下
    2023-08-08
  • Java执行SQL脚本文件到数据库详解

    Java执行SQL脚本文件到数据库详解

    这篇文章主要为大家详细介绍了Java执行SQL脚本文件到数据库的相关方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • java设计模式之装饰器模式(Decorator)

    java设计模式之装饰器模式(Decorator)

    这篇文章主要为大家详细介绍了java设计模式之装饰器模式Decorator,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • SpringBoot中自定义注解实现参数非空校验的示例

    SpringBoot中自定义注解实现参数非空校验的示例

    这篇文章主要介绍了SpringBoot中自定义注解实现参数非空校验,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下
    2020-11-11
  • Maven+Tomcat8 实现自动化部署的方法

    Maven+Tomcat8 实现自动化部署的方法

    本篇文章主要介绍了Maven+Tomcat8 实现自动化部署的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • eclipse部署tomcat服务器无法启动问题的解决方法

    eclipse部署tomcat服务器无法启动问题的解决方法

    这篇文章主要为大家详细介绍了eclipse部署tomcat服务器无法启动问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • SpringBoot将项目打成war包步骤解析

    SpringBoot将项目打成war包步骤解析

    这篇文章主要介绍了SpringBoot将项目打成war包步骤解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Seata AT模式如何实现行锁详解

    Seata AT模式如何实现行锁详解

    这篇文章主要为大家介绍了Seata AT模式如何实现行锁详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Spring零基础到进阶之使用方法详解

    Spring零基础到进阶之使用方法详解

    Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能
    2022-07-07

最新评论