`
bo_hai
  • 浏览: 564660 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

队列(Queue)用JAVA简单实现

 
阅读更多

代码如下:

import java.util.Iterator;
import java.util.List;

public class Queue<E> extends AbstractSingleLinkedList<E> implements List<E> ,java.io.Serializable {

	private static final long serialVersionUID = 6203363761107460505L;
	
	// 指向队头
	private transient Entry<E> front;
	
	private transient int size ;
	// 指向队尾
	private transient Entry<E> rear;
	
	@Override
	public Iterator<E> singleListIterator() {
		return new QueueIterator();
	}

	public Queue() {
		this.front = this.rear = null;
	}
	
	@Override
	public boolean add(E e) {
		Entry<E> newData = new Entry<E>(e, null);
		if (this.rear == null) {
			this.rear = newData;
			this.front = this.rear;
		} else {
			Entry<E> preElement = this.front;
			while (preElement.next != null) {
				preElement = preElement.next;
			}
			preElement.next = newData;
		}
		size ++;
		return true;
	}
	
	/**
	 * 队尾加入元素
	 * @param e
	 * @return
	 */
	public boolean append(E e) {
		return add(e);
	}
	
	/**
	 * 取队头数据
	 */
	@Override
	public E get(int index) {
		return this.front.element;
	}
	
	public E getFrist() {
		return get(0);
	}
	
	/**
	 * 出队列
	 * @return
	 */
	public E delete() {
		E result = null;
		Entry<E> entry = this.front;
		if (entry != null) {
			result = entry.element;
			this.front = entry.next;
			entry = null;
		}
		size --;
		return result;
	}
	
	/**
	 * 队长度
	 */
	@Override
	public int size() {
		return size;
	}

	private static class Entry<E> {
		E element;
		Entry<E> next;
		public Entry(E element, Entry<E> next) {
			this.element = element;
			this.next = next;
		}
	}
	
	private class QueueIterator implements Iterator<E> {
		private Entry<E> itFront = front;
		@Override
		public boolean hasNext() {
			return itFront != null;
		}
	
		@Override
		public E next() {
			E result = itFront.element ;
			itFront = itFront.next;
			return result;
		}
	
		@Override
		public void remove() {
			throw new UnsupportedOperationException("can not remove");
		}
	}
}

 测试代码如下:

public class QueueTest {

	public static void main(String[] args) throws Exception{
		Queue<Integer> qu = new Queue<Integer>();
		qu.append(123);
		qu.append(456);
		qu.append(789);
		qu.append(741);
		System.out.println(qu.getFrist());
		qu.delete();
		System.out.println(qu.getFrist());
		for (Integer val : qu) {
			System.out.print(val);
			System.out.print('\t');
		}
	}
}

 

 

2
1
分享到:
评论
2 楼 bo_hai 2014-01-06  
sosojustdo 写道
一看标题就知道使用了LinkedList去实现的。哈哈。

使用了LinkedList的原理,没有使用LinkedList。
1 楼 sosojustdo 2014-01-04  
一看标题就知道使用了LinkedList去实现的。哈哈。

相关推荐

    利用Vector类(继承)编写一个先进先出的队列类Queue java实现

    ### 使用Vector类(继承)实现先进先出队列类Queue的Java实现 #### 概述 本篇文章将详细介绍如何利用Java中的`Vector`类来实现一个具有先进先出特性的队列类`Queue`。队列是一种特殊的线性表,只允许在一端进行插入...

    java 自定义Queue队列

    总的来说,自定义Java的Queue队列需要对数据结构有深入的理解,并根据具体的应用场景来设计和实现。这包括选择合适的基础数据结构(如ArrayList、LinkedList等),考虑性能和并发访问等因素,以及正确实现Queue接口...

    java队列模拟实现

    在Java中,队列可以使用`java.util.Queue`接口及其实现类如`LinkedList`来创建。 2. **Java 面向对象编程**:此项目中,队列可能被实现为一个类,包含队列的基本操作,如添加元素(enqueue)、移除元素(dequeue)...

    消息队列 Queue与Topic区别.docx

    ### 消息队列Queue与Topic的区别 #### 一、概念概述 消息队列(Message Queue)是一种应用程序间通信机制,允许程序之间通过发送和接收消息进行通信,而不必直接建立连接。它提供了异步处理机制,使得消息的发送者...

    java队列实现(顺序队列、链式队列、循环队列)

    在实际应用中,Java提供了一些内置的队列接口和类,如Queue、Deque、ArrayDeque等,它们提供了上述操作的实现。开发者可以根据具体需求选择合适的数据结构和实现方式。例如,如果需要高效访问元素,可以选择...

    Java队列实现,数据结构

    在这个Java队列实现的数据结构作业练习中,我们将会探讨如何使用Java来创建一个简单的队列,并分析`Queue.java`和`Node.java`这两个文件可能包含的内容。 首先,`Queue.java`很可能是实现队列接口或类的文件。在...

    java多线程模拟队列实现排队叫号

    在Java中,我们可以使用`java.util.Queue`接口及其实现类,如`LinkedList`或`ArrayDeque`来创建队列。 接下来,我们需要创建两个线程类:一个是`CustomerThread`,代表等待叫号的客户,另一个是`ServiceThread`,...

    Java Design Demo -简单的队列

    标题“Java Design Demo -简单的队列”表明这是一个关于如何在Java中实现队列设计的示例项目。可能包含的是一个基础的队列实现,用于教学或演示目的,帮助开发者理解队列的基本操作,如enqueue(入队)和dequeue(出...

    java利用delayedQueue实现本地的延迟队列

    Java 利用 DelayedQueue 实现本地的延迟队列 DelayedQueue 是 Java 中的一种特殊的阻塞队列,它用于存放实现了 Delayed 接口的对象。这种队列是有序的,即队头对象的延迟到期时间最长。 DelayedQueue 能够满足我们...

    设一循环队列Queue,只有头指针front,不设尾指针,另设一个内含元素个数的计数器,试写出相应的进队、出队算法。

    设一循环队列Queue,只有头指针front,不设尾指针,另设一个内含元素个数的计数器,试写出相应的进队、出队算法。

    优先队列-java可以选择属性和升序降序

    Java中的`java.util.PriorityQueue`类为我们提供了实现优先队列的功能。 首先,让我们深入理解`PriorityQueue`的基本概念。`PriorityQueue`是基于二叉堆(一种自平衡的树形数据结构)实现的,它不保证队列的顺序,...

    java-Using-Array-for-Queue.zip_java队列实现

    在这个场景中,我们探讨了两种使用Java实现队列的方法:一种是通过自定义的数组实现,另一种是利用内置的Vector类。接下来,我们将详细讨论这两种实现方式。 首先,我们来看基于数组的队列实现。`ArrayQueue.java`...

    用Java实现数据结构中的队列

    - **Queue接口**: Java的`Queue`接口定义了队列的基本操作,可以通过实现这个接口来创建自定义的队列实现。 3. **ArrayDeque示例** ```java import java.util.ArrayDeque; public class QueueExample { ...

    线程安全队列Queue

    ### 线程安全队列Queue #### 一、背景介绍 在开发多线程应用时,线程安全成为至关重要的考量因素之一。特别是在需要处理并发任务时,如何确保线程之间的安全通信变得尤为重要。本篇文章将围绕一个具体的场景——...

    Part03Queue_java_环形队列_bearqu5_

    在"Part03Queue"这个压缩包中,可能包含了关于如何在Java中实现环形队列的代码示例,通过学习这部分内容,你可以深入了解环形队列的内部机制,并能熟练地在自己的项目中运用。此外,"bearqu5"可能是一个开发者的名字...

    Android之循环队列操作

    在Java或Android环境中,我们可以使用ArrayList或LinkedList等内置数据结构来实现循环队列,但为了更好地控制队列的头部和尾部,我们通常选择自定义一个类来实现。以下是一个简单的循环队列实现: ```java public ...

    Java实现的线程池、消息队列功能

    这篇博客"Java实现的线程池、消息队列功能"似乎提供了关于如何在Java中实现这两种功能的源码示例。尽管描述部分为空,但从提供的文件名我们可以推测,`CodeReader.java`和`SourcePathManager.java`可能包含了读取和...

    Java使用数组实现简单的队列操作SimpleQueue

    数据结构学习-Java使用数组实现简单的队列操作SimpleQueue,简单易懂,适合初学者。

    Using_Java_Queue.zip_java队列

    本教程将深入探讨如何在Java中使用队列,特别是通过LinkedList实现。 ### 1. Java 队列接口 Java提供了多种队列实现,但它们都基于两个主要的接口:`Queue` 和 `Deque`。`Queue` 是基本的队列接口,而 `Deque`...

Global site tag (gtag.js) - Google Analytics