- 浏览: 98406 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
xqxmh:
哈哈哈哈哈哈
12月编程语言榜单公布 C#等评级创新高 - CSDN新闻 -
niechanggang:
这个图片很是形象,linux也来祭奠了。。
【转】悼念一个伟大的公司——Sun - CSDN新闻
java5中对队列的实现
解读java.util.Queue
文章分类:Java编程在计算机学科中,基础数据结构之一 — 是Queue。你会想起Queue是一种数据结构,在它里边的元素可以按照添加它们的相同顺序被移除。在以前的Java版本中,这中FIFO(先进先出)数据结构很不幸被忽略了。随着Java1.5(也叫Tiger)的出现,对Queue支持第一次成为固有特性。
过去在没有Queue的情况下如何管理?
在Java 1.5以前,通常的实现方式是使用java.util.List集合来模仿Queue。Queue的概念通过把对象添加(称为enqueuing的操作)到List的尾部(即Queue的后部)并通过从List的头部(即Queue的前部)提取对象而从List中移除(称为dequeuing的操作)来模拟。下面代码显示了你以前可能做法。
代码:
import java.util.Enumeration;
import java.util.LinkedList;
import java.util.Vector;
public class QueueEmulate
{
private LinkedList queueMembers;
public Object enqueue(Object element)
{
queueMembers.add (element);
return element;
}
public Object dequeue()
{
return queueMembers.removeFirst();
}
}
现在我们有了Queue
Java 1.5在java.util包中新添加了Queue接口,下面代码中使用到它(从sample code的SimpleQueueUsageExample.java截取)。注意,在Java 1.5中,java.util.LinkedList被用来实现java.util.Queue,如同java.util.List接口。也要注意我是如何显式地声明我的只包含字符串的Queue---使用 泛型(如果需要深入了解泛型,请参阅"J2SE 1.5: Java's Evolution Continues")。这样使我省却了当从Queue中提取它们时不得不进行对象造型的痛苦。
代码:
Queue myQueue = new LinkedList();
myQueue.add("Add Me");
myQueue.add("Add Me Too");
String enqueued = myQueue.remove();
你可以看到LinkedList类的add和remove方法被分别用于执行enqueuing和dequeuing操作。实际上没有更好的可用方法;Queue接口提供了新的offer和poll方法,如下显示(截取自SimpleQueueUsageExamplePreferred):
代码:
Queue myQueue = new LinkedList();
boolean offerSuccess;
// offer method tries to enqueue.
// A boolean is returned telling you if the
// attempt to add to the queue was successful or not
offerSuccess=myQueue.offer("Add Me");
offerSuccess=myQueue.offer("Add Me Too");
// peek at the head of the queue, but don't grab it
Object pull = myQueue.peek();
String enqueued = null;
// grab the head of the queue
if (pull!=null) enqueued = myQueue.poll();
System.out.println(enqueued);
如果你的Queue有固定长度限制(常常是这种情形),使用add方法向Queue中添加内容,将导致抛出一个非检查异常。当你编译SimpleQueueUsageExample的代码时,编译器将会就此问题发出警告。相反,当新的offer方法试图添加时,如果一切正常则会返回TRUE,否则,返回FALSE。同样地,如果你试图使用remove方法对一个空Queue操作时,也将导致一个非检查异常。
你也可以使用poll方法去从Queue中提取元素。如果在Queue中没有元素存在,poll方法将会返回一个null(即不会抛出异常)。在某些情况下,你可能不想提取头部的元素而只是想看一下。Queue接口提供了一个peek方法来做这样的事情。如果你正在处理一个空Queue,peek方法返回null。象add-offer和remove-poll关系一样,还有peek-element关系。在Queue为空的情形下,element方法抛出一个非检查异常。但如果在Queue中有元素,peek方法允许你查看一下第一个元素而无需真的把他从Queue中取出来。peek方法的用法在SimpleQueueUsageExamplePreferred类中有示例。
AbstractQueue类
如你所见,java.util.LinkedList类实现了java.util.Queue接口,同样,AbstractQueue也是这样。AbstractQueue 类实现了java.util接口的一些方法(因此在它的名字中包含abstract)。而AbstractQueue将重点放在了实现offer,poll和peek方法上。另外使用一些已经提供的具体实现。
PriorityQueue类
在PriorityQueue中,当你添加元素到Queue中时,实现了自动排序。根据你使用的PriorityQueue的不同构造器,Queue元素的顺序要么基于他们的自然顺序要么通过PriorirtyQueue构造器传入的Comparator来确定。下面的代码示例了PirorityQueue类的使用方法。在Queue的前边是字符串"Alabama"-由于元素在PriorityQueue中是按自然顺序排列的(此例中是按字母表顺序)。
代码:
PriorityQueue priorityQueue = new PriorityQueue();
priorityQueue.offer("Texas");
priorityQueue.offer("Alabama");
priorityQueue.offer("California");
priorityQueue.offer("Rhode Island");
int queueSize = priorityQueue.size();
for (int i =0; i< queueSize; i++)
{
System.out.println(priorityQueue.poll());
}
执行结果如下:
Alabama
California
Rhode Island
Texas
Queue各项按照自然顺序-字母顺序-来排列。
如上提到的,你可以创建你自己的Comparator类并提供给PirorityQueue。如此,你可以定义你自己的排序方式。在PriorityQueueComparatorUsageExample 类中可找到此方式,在其中使用了一个名为State的助手类。如你在下边看到的,在类定义中,State只简单地包含了一个名字和人口。
代码:
private String name;
private int population;
public State(String name, int population)
{
super();
this.name = name;
this.population = population;
}
public String getName()
{
return this.name;
}
public int getPopulation()
{
return this.population;
}
public String toString()
{
return getName() + " - " + getPopulation();
}
在PriorityQueueComparatorUsageExample中,Queue使用了java.util.Comparator的自定义实现来定义排列顺序(如下)。
代码:
PriorityQueue priorityQueue =
new PriorityQueue(6, new Comparator()
{
public int compare(State a, State b)
{
System.out.println("Comparing Populations");
int populationA = a.getPopulation();
int populationB = b.getPopulation();
if (populationB>populationA)
return 1;
else if (populationB
解读java.util.Queue - 向比尔盖茨学习 - JavaEye技术网站
发表评论
-
数据库数据批量SQL导出工具
2011-07-04 16:05 1347好久没有完整的编码了,没有了code带来的乐趣,每天忙碌与b ... -
ultraedit 中中文乱码 的解决方法
2010-08-25 08:24 0ultraedit 中中文乱码 的解决方法 问题:同样的一个 ... -
was配置jms 进行mq的访问方法
2010-09-07 08:24 01、 软件准备,mq、was均安装完毕,此处使用的是mq ... -
db2 ERRORCODE=-4499, SQLSTATE=08001
2010-09-19 06:50 45021、 db2 ERRORCODE=-4499, SQLSTAT ... -
ultraedit 中中文乱码 的解决方法
2010-08-25 08:24 2328ultraedit 中中文乱码 的解决方法 问题:同样的一个 ... -
was配置jms 进行mq的访问方法
2010-09-07 08:24 15801、 软件准备,mq、was均安装完毕,此处使用的是mq ... -
Hibernate3.3使用手册下载chm版
2010-07-15 13:57 1021Hibernate3.3使用手册下载chm版,欢迎下载 -
利用P6SPY +SQL Profiler记录、统计web app对数据库的操作。 - 每日E读 - BlogJava
2010-07-13 05:14 919弄hibernate时,想显示 ... -
P6SPY结合SQL Profile进行数据库调优
2010-07-13 07:51 1049使用p6spy进行数据库操作执行时间的记录极大的方便了数据库程 ... -
设计模式学习笔记,不断更新中……
2010-06-21 03:05 6992010-6-21 设计模式不过是在编程过程中需要遵守的一些 ... -
java容器分类图
2010-05-29 03:07 1000做个笔记 -
关于Hibernate获取JDBC连接 直接执行SQL - 客观,辩证,务实,创新 - JavaEye技术网站
2010-06-09 07:58 1012关于Hibernate获取JDBC连接 直接执行SQL关 ... -
NIO入门pdf分享
2010-04-13 14:39 1165根据IBM developerwork上的教材整理的pdf文档 ... -
守护线程 - walkes - JavaEye技术网站
2010-04-08 01:51 627守护线程 关键字: 守护线程 守护线程是为其他线程的运 ... -
同步、异步、长连接、短连接
2010-04-08 02:24 1747四个概念对应于网络连 ... -
【转】GEF+EMF Step By Step (转) - 嘟嘟 - BlogJava
2010-04-06 04:55 861学习GEF的曲线还是比较陡峭的,建议按照以下步骤来学(要求先熟 ... -
Java 理论与实践: 使用通配符简化泛型使用
2010-04-07 06:37 587Java 理论与实践: 使用通配符简化泛型使用 理解通配 ... -
draw2d
2010-03-29 22:28 620draw2d,画图简单,n多东西的页面展示搞得我筋疲力尽,稳住 ... -
MQ大大降低了程序的耦合性
2010-03-25 03:20 681通过同一个MQ队列的消息读取,可以将不同的程序模块联系起来,大 ... -
关于strtus2上传文件的问题
2010-03-17 06:26 7631、 strtus2在上传文件时,同样将java.io.Fil ...
相关推荐
赠送jar包:jetty-util-9.4.43.v20210629.jar; 赠送原API文档:jetty-util-9.4.43.v20210629-javadoc.jar; 赠送源代码:jetty-util-9.4.43.v20210629-sources.jar; 赠送Maven依赖信息文件:jetty-util-9.4.43.v...
### Java.util.logging.Logger 使用详解 #### 一、创建Logger对象 在Java中,`java.util.logging.Logger` 是...通过本文的学习,开发者能够更好地掌握 `java.util.logging` 框架的核心概念,并在实际项目中灵活运用。
apr-util-1.3.9-1.el5.i386.rpm apr-util-devel-1.3.9-1.el5.i386.rpm apr-util-ldap-1.3.9-1.el5.i386.rpm libxslt-python-1.1.17-2.el5_2.2.i386.rpm system-config-httpd-1.3.3.3-1.el5.noarch.rpm
### Java.util.Date与Java.sql.Date互转及字符串转换为日期时间格式 #### 一、Java.util.Date与Java.sql.Date的基本概念 在Java编程语言中,处理日期和时间时经常使用到`java.util.Date`和`java.sql.Date`这两个类...
1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...
### Java.util.Date与Java.sql.Date相互转换 #### 知识点概述 在Java开发中,经常需要处理日期和时间相关的操作。Java标准库提供了两个重要的日期类:`java.util.Date` 和 `java.sql.Date`。虽然它们名字相似,但...
通过本文的学习,您应该已经了解了如何使用 Java 中的 `java.util.zip` 包来进行数据的压缩与解压操作。无论是对于 ZIP 文件还是 GZIP 文件,该包都提供了强大的支持。在实际开发过程中,合理利用这些工具可以帮助您...
asm-util-1.3.4.jar, asm-util-1.3.5.jar, asm-util-1.4.1.jar, asm-util-1.4.3.jar, asm-util-1.5.1.jar, asm-util-1.5.2.jar, asm-util-1.5.3.jar, asm-util-2.0.jar, asm-util-2.1.jar, asm-util-2.2.1-sources....
赠送jar包:jetty-util-ajax-9.3.19.v20170502.jar; 赠送原API文档:jetty-util-ajax-9.3.19.v20170502-javadoc.jar; 赠送源代码:jetty-util-ajax-9.3.19.v20170502-sources.jar; 赠送Maven依赖信息文件:jetty-...
在给定的文件信息中,我们看到两个重要的文件:"cors-filter-1.7.jar" 和 "java-util-1.9.1.jar",这些都是与Java相关的库文件,通常用于增强应用程序的功能。 首先,让我们来详细探讨"Cors Filter"。CORS(Cross-...
根据提供的文件信息,本文将深入探讨Java中的`java.util.Iterator`接口及其在集合类中的应用。我们将从以下几个方面进行详细解析: ### 一、集合类的根接口:Collection `Collection`接口是Java集合框架的基础,它...
赠送jar包:jetty-util-9.4.11.v20180605.jar; 赠送原API文档:jetty-util-9.4.11.v20180605-javadoc.jar; 赠送源代码:jetty-util-9.4.11.v20180605-sources.jar; 赠送Maven依赖信息文件:jetty-util-9.4.11.v...
赠送jar包:jetty-util-ajax-9.3.19.v20170502.jar; 赠送原API文档:jetty-util-ajax-9.3.19.v20170502-javadoc.jar; 赠送源代码:jetty-util-ajax-9.3.19.v20170502-sources.jar; 赠送Maven依赖信息文件:jetty-...
"java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError" 是一个典型的错误提示,它表明在并发执行过程中遇到了内存不足的问题。下面我们将深入探讨这个问题的原因、影响以及如何解决。 内存溢出...
【标题】"ws-commons-util-1.0.2.zip_ws-comm-util.jar" 提供的是一个名为 ws-commons-util 的库的版本1.0.2,这个库经过压缩打包成ZIP格式,其中包含了 ws-comm-util.jar 文件。这个JAR文件是Java应用程序中常见的...
asm-util-3.2.jarasm-util-3.2.jarasm-util-3.2.jarasm-util-3.2.jarasm-util-3.2.jarasm-util-3.2.jarasm-util-3.2.jarasm-util-3.2.jarasm-util-3.2.jarasm-util-3.2.jarasm-util-3.2.jarasm-util-3.2.jarasm-util...
标题中的"apr-util-1.5.4.tar.gz"是一个开源软件库的归档文件,它属于Apache Portable Runtime (APR)项目的一部分。APR是一个为各种操作系统提供统一API的库,主要用于处理底层系统功能,如文件I/O、网络通信、进程...
予org.jasig.cas.client.util.CommonUtils 加入 public static void disableSSLVerification(){ try { // Create a trust manager that does not validate certificate chains TrustManager[] ...
Java编程语言中,`java.util.Date` 和 `java.sql.Date` 都是用来处理日期的类,但它们在用途和特性上有所不同。理解这两者之间的差异对于进行数据库操作至关重要。 1. **`java.util.Date`**: - `java.util.Date` ...