1. 基于数组

package Algorithm.learn;

import java.util.Arrays;

/**
* Created by liujinhong on 2017/3/7.
*/
public class ArrayQueue<E> {
Object[] queue;
int size; public ArrayQueue() {
queue = new Object[10];
} public boolean isEmpty() {
return size == 0;
} public E poll() {
if (isEmpty()) return null;
E data = (E) queue[0];
System.arraycopy(queue, 1, queue, 0, size-1);
size--;
return data;
} private void ensureCapacity(int size) {
if (size > queue.length) {
int len = queue.length + 10;
queue = Arrays.copyOf(queue, len);
}
} public void offer(E data) {
ensureCapacity(size+1);
queue[size++] = data;
} public static void main(String[] args) {
ArrayQueue<Integer> queue = new ArrayQueue<>(); for (int i = 0; i < 20; i++) {
queue.offer(i);
} for (int i = 0; i < 20; i++) {
System.out.println(queue.poll());
}
}
}

2. 基于链表

package Algorithm.learn;

/**
* Created by liujinhong on 2017/3/7.
* 基于链表实现队列
*/
public class ListQueue<E> {
class Node<E> {
Node<E> next = null;
E data;
public Node(E data) {
this.data = data;
}
} private Node<E> head = null;
private Node<E> tail = null; public boolean isEmpty() {
return head == null;
} public void offer(E e) {
Node<E> node = new Node<E>(e);
if (isEmpty()) {
head = node;
tail = node;
return;
}
tail.next = node;
     tail = node;
} public E poll() {
if (isEmpty()) return null;
E data = head.data;
head = head.next;
return data;
} public int size() {
Node<E> temp = head;
int len = 0;
while (temp != null) {
len++;
temp = temp.next;
}
return len;
} public static void main(String[] args) {
ListQueue<String> queue = new ListQueue<>();
queue.offer("a");
queue.offer("b"); System.out.println(queue.poll());
System.out.println(queue.poll());
}
}

Java队列的两种实现方式的更多相关文章

  1. Java多线程的两种实现方式

    Java总共有两种方式实现多线程 方式1:通过继承Thread类的方式 package com.day04; /** * 通过继承Thread类并复写run方法来是实现多线程 * * @author ...

  2. 阿里巴巴--java多线程的两种实现方式,以及二者的区别

    阿里巴巴面试的时候,昨天问了我java面试的时候实现java多线程的两种方式,以及二者的区别当时只回答了实现线程的两种方式,但是没有回答上二者的区别: java实现多线程有两种方式: 1.继承Thre ...

  3. [转载]Java线程的两种实现方式

    转载:http://baijiahao.baidu.com/s?id=1602265641578157555&wfr=spider&for=pc 前言 线程是程序的一条执行线索,执行路 ...

  4. [Java]HashMap的两种排序方式

    先将 Map 中的 key 和 value 全部取出来封装成 JavaBea 数组,再将这个数组排序,排序完成后,重新写回 Map 中,写回时采用 LinkedHashMap 可以保证迭代的顺序. 下 ...

  5. java多线程的两种创建方式

    方式一:继承Thread类 1.创建一个继承于Thread类的子类 2.重写Thread类的run()方法---> 将此线程执行的操作声明在run()中 3.创建Thread类的子类的对象 4. ...

  6. Java多线程13:读写锁和两种同步方式的对比

    读写锁ReentrantReadWriteLock概述 大型网站中很重要的一块内容就是数据的读写,ReentrantLock虽然具有完全互斥排他的效果(即同一时间只有一个线程正在执行lock后面的任务 ...

  7. Java学习-014-文本文件写入实例源代码(两种写入方式)

    此文源码主要为应用 Java 读取文本文件内容实例的源代码.若有不足之处,敬请大神指正,不胜感激! 第一种:文本文件写入,若文件存在则删除原文件,并重新创建文件.源代码如下所示: /** * @fun ...

  8. Java中String对象两种赋值方式的区别

    本文修改于:https://www.zhihu.com/question/29884421/answer/113785601 前言:在java中,String有两种赋值方式,第一种是通过“字面量”赋值 ...

  9. Java使用SFTP和FTP两种连接方式实现对服务器的上传下载 【我改】

    []如何区分是需要使用SFTP还是FTP? []我觉得: 1.看是否已知私钥. SFTP 和 FTP 最主要的区别就是 SFTP 有私钥,也就是在创建连接对象时,SFTP 除了用户名和密码外还需要知道 ...

随机推荐

  1. Linq初探

    1.什么是LINQ LINQ是语言集成查询(Language Integrated Query),这项技术是在.net 3.5就已经引入的技术,极大的方便了数据的查询,他可以支持数据库.XML.ADO ...

  2. 集成tomcat插件到eclipse

    Eclipse中Tomcat的配置及简单例子 环境: 系统: Windows 7 64位专业版 Eclipse: Eclipse Java EE IDE for Web Developers.     ...

  3. linux route命令的使用详解 添加永久静态路由 tracert traceroute

    linux route命令的使用详解 添加永久静态路由  tracert  traceroute route -n    Linuxroute  print  Windows traceroute  ...

  4. tools-eclipse-004-UML图安装

    git:https://github.com/takezoe/amateras-modeler 下载:http://sourceforge.jp/projects/amateras/downloads ...

  5. enum 枚举类型默认值

    enum value { one, two, three, four }; 默认值

  6. (24)如何使用HttpClient

    介绍 HttpClient是HTTP客户端的接口.HttpClient封装了各种对象,处理cookies,身份认证,连接管理等. 概念 HttpClient的使用一般包含下面6个步骤: 创建 Http ...

  7. uva11324 有向图的强连通分量+记忆化dp

    给一张有向图G, 求一个结点数最大的结点集,使得该结点集中任意两个结点u和v满足,要么u可以到达v, 要么v可以到达u(u和v相互可达也可以). 因为整张图可能存在环路,所以不好使用dp直接做,先采用 ...

  8. 【android】如何让WebView对Video标签的支持更强力

    先说结论:各个产商对HTML5特性支持的程度不一样,用默认的WebChromeClient不能普遍适用. 因此咱基于GITHUB上一个VideoEnabledWebView库做了自己的封装,在魅族.华 ...

  9. myeclipse安装jadclipse(反编译工具)

    我是myeclipse5. 的IDE工具.为了能反编译class文件,上网搜索了很多资料,终于找到一下的一段资料: .将jad.exe 复制到myeclipse安装目录的jre/bin目录下, 如:C ...

  10. DB开发之oracle存储过程

    1. 存储过程格式 /* Formatted on 2011/1/17 13:20:44 (QP5 v5.115.810.9015) */ CREATE OR REPLACE procedure pr ...