黑马程序员技术交流社区
标题:
LinkedList来模拟一个队列数据结构——为会死循环
[打印本页]
作者:
王延龙
时间:
2013-7-23 10:54
标题:
LinkedList来模拟一个队列数据结构——为会死循环
本帖最后由 杨兴庭 于 2013-7-24 21:06 编辑
package practicetest;
import java.util.LinkedList;
public class LinkedTest {
/**
* 请用LinkedList来模拟一个队列或者堆栈数据结构。
*
* 堆栈:先进后出 First In Last Out ———— FILO
*
* 队列:先进先出First In First Out ———— FIFO
*
*
* 实现思路:
* 我们应该描述一个这样的容器,给使用者提供一个容器对象完成这两种结构中的一种
* 存取分别封装link方法
*/
public static void main(String[] args) {
MyQueue myQueue = new MyQueue();
myQueue.myAdd("object1");
myQueue.myAdd("object2");
myQueue.myAdd("object3");
myQueue.myAdd("object4");
while(!myQueue.isNull()){
System.out.println(myQueue.myGet());
}
}
}
//定义类
class MyQueue{
private LinkedList link;
public MyQueue(){
link = new LinkedList();
}
/*
* 队列添加元素的功能封装
*/
public void myAdd(Object obj){
link.addLast(obj);
}
/*
* 队列取出元素的功能,
*/
public Object myGet(){
return link.getLast();
}
/*
* 判断是否为空
*/
public boolean isNull(){
return link.isEmpty();
}
}
作者:
liuzhming
时间:
2013-7-23 11:57
队列的特点是数据从队列的末尾添加进去,从队列的头部取出,并移除。在你写队列取出元素的功能myGet()时,却返回的是队列的末尾元素。这有点像是实现一个栈,但又不完全是,因为栈会在取出元素后,把这个元素从栈中删除。myGet()方法应该通过从队列头部取出元素并删除元素,即使用LinkedList的pollFirst()方法。实现代码如下:
import java.util.LinkedList;
public class Test2 {
public static void main(String[] args)
{
MyQueue my = new MyQueue();
my.myAdd("aa");
my.myAdd("bb");
my.myAdd("cc");
my.myAdd("dd");
my.myAdd("ee");
my.myAdd("ff");
while(!my.isNull())
{
System.out.println(my.myGet());
}
}
}
class MyQueue
{
private LinkedList link;
public MyQueue()
{
link = new LinkedList();
}
public void myAdd(Object obj)
{
link.addLast(obj);
}
public Object myGet()
{
return link.pollFirst();
}
public boolean isNull()
{
return link.isEmpty();
}
}
作者:
toShareBeauty
时间:
2013-7-23 12:02
楼上对的
作者:
冒烟的芒果
时间:
2013-7-24 11:42
MyQueue类中的myGet()函数有点问题
link.getLast() 是返回队列的最后一个元素 ,但是并不删除,所以这个队列会一直为 不空 状态,就导致了死循环
如果要返回并移除最后的元素 应该用 removeLast() ;移除并返回最前面的元素 用removeFirst()
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2