Java版数据结构插入数据时遇到的结点为空的问题详解
2019-12-02 18:12
1121 查看
在演示Java版数据结构与算法教材中的头插法代码时遇到了空结点问题 。 先上代码。
链表类
import java.util.Scanner; public class ListLinked<T> { ListLinkedNode<Integer> head=new ListLinkedNode<Integer>();//声明头结点 //添加结点 public void addFromHead(int e){ ListLinkedNode<Integer> p=new ListLinkedNode<Integer>();//声明并创建结点p为插入结点 p.setData(e); p.setNext(head.getNext()); head.setNext(p);//将p插入到头结点后 } //头插法创建链表 public static ListLinked<Integer> createFromHead() { ListLinked<Integer> listLinked=new ListLinked<>();//初始化链表 System.out.println("-头插法建立链表-"); System.out.println("请输入链表长度:"); Scanner sc=new Scanner(System.in); //n : 链表长度 int n=sc.nextInt(); System.out.println("请输入值:"); for(int i=0;i<n;i++) { System.out.print("请输入第"+(i+1)+"个值:"); int e=sc.nextInt(); listLinked.addFromHead(e); } System.out.println("链表创建完毕"); return listLinked; } //输出 public void display() { System.out.println("{"); ListLinkedNode<Integer> p=new ListLinkedNode<Integer>(); p=head.getNext(); while(p!=null) { int value=p.getData(); System.out.println(value); p=p.getNext(); } System.out.println("}"); } }
节点类
public class ListLinkedNode<T>{ //数据成员 private T data; private ListLinkedNode<T> next; //获得数据域 public T getData() { return data; } //设置数据域 public void setData(T data) { this.data=data; } //得到指针域 public ListLinkedNode<T> getNext(){ return next; } //设置指针域 public void setNext(ListLinkedNode<T> next) { this.next=next; } //有参构造函数 public ListLinkedNode(T data) { this.data=data; this.next=null; } //无参构造函数 public ListLinkedNode() { } }
测试类
public class test { public static void main(String[] args) { ListLinked list=new ListLinked(); list.createFromHead(); list.display(); } }
测试,在判断p是否为空执行输出的时候,p一直为null。
打断点调试的时候发现了问题所在。
因为java把引用类型当作了指针,所以在addFromHead方法里,head里的next存的是p对象的地址。
当出了addFromHead方法,局部变量p的生命周期结束被垃圾回收机制带走
栈中没有变量再指向之前在堆中的p对象,所以堆中的对象也被当作了垃圾被带走,head的next又变成了null
以上就是Java版数据结构插入数据时遇到的结点为空的问题的全部内容,感谢大家对脚本之家的支持。
相关文章推荐
- 使用java和mybatis时遇到的数据无法插入问题
- 用java程序向数据库插入数据遇到的几个问题
- 详解java解决分布式环境中高并发环境下数据插入重复问题
- 那些年java web开发中遇到的问题(4)---如何实现表单提交(插入数据到mysql)
- 在JAVA向Mysql的数据库中插入数据过大所遇到的问题
- 开发时遇到使用LINQ无法进行数据插入时的问题
- 遇到的问题-----------perl脚本用handlersocket把数据插入mysql执行时报错lock_tables
- jquery动态增加表格表单行来插入数据-------遇到的兼容问题和radio问题
- java向mysql插入数据乱码问题解决
- 【郝斌数据结构自学笔记】16-23_链表的定义与分类_链表节点插入与删除_每一个链表节点的数据类型该如何表示的问题
- 一次插入上万条数据遇到的问题
- java处理http发送的数据转化为json格式并返回遇到的问题
- java 用数据组身oracle中插入数据问题
- 往hbase中插入数据遇到的历史版本数目的问题
- Java:jdbc连接数据库插入中文数据乱码问题
- Java向mysql中插入数据优化问题
- 关于java中向数据库中插入数据时,报错Caused by: java.lang.NullPointerException的问题
- 【javaweb:事务控制】事务控制两个方法在插入存在主从表关系的数据时应该注意的顺序问题!
- Java中在时间戳计算的过程中遇到的数据溢出问题
- java抓mongodb数据遇到的问题