java链表的增删查改的实现与测试
来源:互联网 发布:excel数据 access 编辑:程序博客网 时间:2024/05/16 17:07
java实现链表主要依靠引用传递,引用可以理解为地址,链表的遍历多使用递归,这里我存在一个疑问同一个类的不同对象的的相同方法的方法内调用算不算递归,欢迎评论交流。
代码如下:
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 void setName(String name){ this.name=name; } public String getName(){ return this.name; } public void setPeople(String people){ this.people=people; } public String getPeople(){ return this.people; } public void setAge(int age){ this.age=age; } public int getAge(){ return this.age; } public String getInfo(){ return "名字 :"+this.name+"\n"+ "人物 :"+this.people+"\n"+ "年龄 :"+this.age; }}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; }}public class linkdemo{ 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()); }}
测试效果如下:
D:\code\java>javac linkdemo.javaD:\code\java>java linkdemo链表长度: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
1 0
- java链表的增删查改的实现与测试
- 用Java语言实现链表的增删改查
- java实现单链表的增删改查与排序
- java实现cassandra的增删改查
- java实现cassandra的增删改查
- JAVA实现单链表的增删改查
- java实现单链表的增删改查
- java实现数组的增删改查
- java实现链表,增删改查
- 顺序表的增删改查实现
- 链表的基本操作的实现---- 增删改查
- C++链表的增删改查实现原理
- flex与java实现增删改查
- flex与java实现增删改查
- Java实现对cookie的操作(增删改查)(未测试)
- 用java实现双向循环链表的增删改查
- Java 与SQLserver的连接 与增删改查
- 链表的增删改查
- JAVA自带的进制转换函数
- hdu 1503 Advanced Fruits
- Activity详解(三)
- 双指针的作用
- 配置NGINX前端APACHE后端服务器
- java链表的增删查改的实现与测试
- C++获取一个文件夹下的所有文件名
- NYOJ-28 大数阶乘
- re模块--正则
- 完成端口模型
- XZ_iOS之使用webView加载后台返回的一串html代码,HTML中的图片不显示
- 电商秒杀系统-数据库表设计
- Atom Editor for Windows 插件安装方法
- kail install chinese