- 浏览: 1012296 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (826)
- 硬件 (8)
- 软件 (24)
- 软件工程 (34)
- JAVA (229)
- C/C++/C# (77)
- JavaScript (8)
- PHP (1)
- Ruby (3)
- MySQL (14)
- 数据库 (19)
- 心情记事 (12)
- 团队管理 (19)
- Hadoop (1)
- spring (22)
- mybatis(ibatis) (7)
- tomcat (16)
- velocity (0)
- 系统架构 (6)
- JMX (8)
- proxool (1)
- 开发工具 (16)
- python (10)
- JVM (27)
- servlet (5)
- JMS (26)
- ant (2)
- 设计模式 (5)
- 智力题 (2)
- 面试题收集 (1)
- 孙子兵法 (16)
- 测试 (1)
- 数据结构 (7)
- 算法 (22)
- Android (11)
- 汽车驾驶 (1)
- lucene (1)
- memcache (12)
- 技术架构 (7)
- OTP-Erlang (7)
- memcached (17)
- redis (20)
- 浏览器插件 (3)
- sqlite (3)
- Heritrix (9)
- Java线程 (1)
- scala (0)
- Mina (6)
- 汇编 (2)
- Netty (15)
- libevent (0)
- CentOS (12)
- mongod (5)
- mac os (0)
最新评论
-
kingasdfg:
你这里面存在一个错误添加多个任务 应该是这样的 /** * ...
Quartz的任务的临时启动和暂停和恢复【转】 -
kyzeng:
纠正一个错误,long型对应的符号是J,不是L。
Jni中C++和Java的参数传递 -
zhaohaolin:
抱歉,兄弟,只是留下作记录,方便学习,如果觉得资料不好,可以到 ...
netty的个人使用心得【转】 -
cccoooccooco:
谢谢!自己一直以为虚机得使用网线才可以与主机连接呢。。
主机网卡无网线连接与虚拟机通信 -
yuqilin001:
要转别人的东西,请转清楚点嘛,少了这么多类,误人子弟
netty的个人使用心得【转】
tomcat 7 源码分析-12 Enumeration枚举
Enumeration枚举,就是要把内容没有重复的遍历,而且不破坏原有的存储空间。在http headers的实现中,tomcat实现了一些枚举类。
Enumerate the distinct header names. Each nextElement() is O(n)
- class NamesEnumerator implements Enumeration<String> {
- int pos;
- int size;
- String next;
- MimeHeaders headers;
- public NamesEnumerator(MimeHeaders headers) {
- this .headers=headers;
- pos=0 ;
- size = headers.size();
- findNext();
- }
- private void findNext() {
- next=null ;
- for ( ; pos< size; pos++ ) {
- next=headers.getName( pos ).toString();
- for ( int j= 0 ; j<pos ; j++ ) {
- if ( headers.getName( j ).equalsIgnoreCase( next )) {
- // duplicate.
- next=null ;
- break ;
- }
- }
- if ( next!= null ) {
- // it's not a duplicate
- break ;
- }
- }
- // next time findNext is called it will try the
- // next element
- pos++;
- }
- public boolean hasMoreElements() {
- return next!= null ;
- }
- public String nextElement() {
- String current=next;
- findNext();
- return current;
- }
- }
class NamesEnumerator implements Enumeration<String> { int pos; int size; String next; MimeHeaders headers; public NamesEnumerator(MimeHeaders headers) { this.headers=headers; pos=0; size = headers.size(); findNext(); } private void findNext() { next=null; for( ; pos< size; pos++ ) { next=headers.getName( pos ).toString(); for( int j=0; j<pos ; j++ ) { if( headers.getName( j ).equalsIgnoreCase( next )) { // duplicate. next=null; break; } } if( next!=null ) { // it's not a duplicate break; } } // next time findNext is called it will try the // next element pos++; } public boolean hasMoreElements() { return next!=null; } public String nextElement() { String current=next; findNext(); return current; } }
Enumeration的核心是findNext函数,实现了找到下一个元素的功能,保障与之前的不重复。
简单分析findNext的算法:
pos就表示next的位置,如果在循环pos前面的元素时,发现有重复的,就把next=null,跳出循环后,判断是否为null。
如果next为null,外边的循环仍然继续,pos后移,此举就是跳出有重复的元素。
如果next不等于null,说明此pos的元素与之前不重复,next即是下一个元素。整个循环结束。
最后pos++,为下一个next做准备。
类似的写了个队char的枚举类,验证了下算法
- package com.test.Enumerator;
- import java.util.Enumeration;
- public class CharEnumeration implements Enumeration<Character> {
- Character next;
- Character characters[];
- int pos;
- int size;
- CharEnumeration(Character a[]) {
- characters = a;
- size = a.length;
- pos = 0 ;
- findNext();
- }
- @Override
- public boolean hasMoreElements() {
- // TODO Auto-generated method stub
- return next != null ;
- }
- private void findNext() {
- next = null ;
- for (; pos < size; pos++) {
- next = characters[pos];
- for ( int i = 0 ; i < pos; i++) {
- if (next == characters[i]) {
- next = null ;
- break ;
- }
- }
- if (next != null )
- break ;
- }
- pos++;
- }
- @Override
- public Character nextElement() {
- // TODO Auto-generated method stub
- Character cur = next;
- findNext();
- return cur;
- }
- public void PrintAll() {
- while (hasMoreElements()) {
- System.out.println(nextElement());
- }
- }
- }
package com.test.Enumerator; import java.util.Enumeration; public class CharEnumeration implements Enumeration<Character> { Character next; Character characters[]; int pos; int size; CharEnumeration(Character a[]) { characters = a; size = a.length; pos = 0; findNext(); } @Override public boolean hasMoreElements() { // TODO Auto-generated method stub return next != null; } private void findNext() { next = null; for (; pos < size; pos++) { next = characters[pos]; for (int i = 0; i < pos; i++) { if (next == characters[i]) { next = null; break; } } if (next != null) break; } pos++; } @Override public Character nextElement() { // TODO Auto-generated method stub Character cur = next; findNext(); return cur; } public void PrintAll() { while (hasMoreElements()) { System.out.println(nextElement()); } } }
- package com.test.Enumerator;
- public class EnumeratorTest {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Character [] sample = {'a' , 'b' , 'c' , 'd' , 'e' , 'a' , 'a' , 'b' };
- CharEnumeration che = new CharEnumeration(sample);
- che.PrintAll();
- }
- }
package com.test.Enumerator; public class EnumeratorTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Character [] sample = {'a','b','c','d','e','a','a','b'}; CharEnumeration che = new CharEnumeration(sample); che.PrintAll(); } }
发表评论
-
tomcat7.0.8的高级应用-apr1.4.2安装
2011-03-24 17:16 983一 windows下安装 直接 ... -
tomcat 7 源码分析-14 tomcat的container设计
2011-03-11 19:18 1546tomcat 7 源码分析-14 tomca ... -
tomcat 7 源码分析-13 处理request的Valve和Valve的链表Pipeline
2011-03-11 19:17 1127tomcat 7 源码分析-13 处理request的Val ... -
tomcat 7 源码分析-11 tomcat对http协议的实现
2011-03-11 19:13 1401tomcat 7 源码分析-11 tomcat对http协议 ... -
tomcat 7 源码分析-10 线程池ThreadPoolExecutor
2011-03-11 19:12 2211tomcat 7 源码分析-10 线程池ThreadPool ... -
tomcat 7 源码分析-9 tomcat对ServerSocket的封装和使用
2011-03-11 19:11 1634tomcat 7 源码分析-9 tomcat对ServerS ... -
tomcat 7 源码分析-8 生命周期lifecycle和监听listener
2011-03-11 19:10 1384tomcat 7 源码分析-8 生命周期lifecycle和 ... -
tomcat 7 源码分析-7 server初始化中的JMX(DynamicMBean)再续
2011-03-11 19:09 1041tomcat 7 源码分析-7 server初始化中的JMX ... -
tomcat 7 源码分析-6 server初始化中的JMX(DynamicMBean)续
2011-03-11 19:08 1189tomcat 7 源码分析-6 server ... -
tomcat 7 源码分析-5 server初始化中的JMX(DynamicMBean)
2011-03-11 19:08 1364tomcat 7 源码分析-5 server初始化中的JMX ... -
tomcat 7 源码分析-4 server初始化背后getServer().init()
2011-03-11 19:06 1352tomcat 7 源码分析-4 server初始化背后get ... -
tomcat 7 源码分析-3 使用Digester读取xml文件实例化server
2011-03-11 19:05 1387tomcat 7 源码分析-3 使用Digester读取xm ... -
tomcat 7 源码分析-2 类加载ClassLoader
2011-03-11 19:04 1932tomcat 7 源码分析-2 类加载ClassLoader ... -
tomcat 7 源码分析-1 关于读取properties及注册系统properties
2011-03-11 19:02 1591tomcat 7 源码分析-1 关于读取properties ... -
Tomcat的四种基于HTTP协议的Connector性能比较
2011-03-11 17:58 1114Tomcat的四种基于HTTP协议的Connector性能比较 ...
相关推荐
Access-based Enumeration(基于访问权限的枚举)是Windows操作系统中的一项功能,特别是在Windows Server 2003中引入,用于改善文件服务器的用户体验。这项功能允许用户只看到他们有权限访问的文件和文件夹,而不是...
首先,几个有用的oneliners;... 用于渗透测试和CTFLinux枚举工具 该项目的灵感来自并使用了许多测试。 不像LINENUM, lse尝试gradualy揭露根据其重要性从一个privesc点的信息。 它是什么? 该She
linux-smart-enumeration-master.zip
首先,枚举(Enumeration)是一种在编程语言中表示固定数量的常量集合的数据类型。在Java、C#等语言中,枚举提供了方便的方式来定义一组相关的常量,通常用于表示特定的值或状态。例如,我们可以创建一个表示颜色的...
"The-PS-enumeration-process-3.2.zip_The Process_列举进程"是一个与进程管理相关的项目,其目标是通过源码实现对系统中进程的枚举,即查找并列出所有正在运行的进程。在Windows系统中,这种功能通常由任务管理器...
`Enumeration`在Java早期版本中用于迭代容器中的元素,虽然在Java集合框架的后续版本中被迭代器(Iterator)所取代,但在处理`HashTable`时,`Enumeration`仍然是首选工具。 `HashTable`的主要特点包括线程安全(即...
标签“源码”和“工具”表明这篇博客可能分析了某个开源工具或框架中枚举的实现方式,并提供了相关的代码示例。 在实际开发中,枚举的映射通常涉及到将枚举值与对应的业务逻辑、数据或配置关联起来。例如,一个状态...
本文将深入探讨如何在Delphi中进行进程和线程的枚举,以及如何利用窗体组件调用例程来实现相关功能。 首先,我们要理解进程与线程的基本概念。进程是程序在内存中的运行实例,它拥有独立的资源,如内存空间、文件...
### 枚举(Enumeration) 枚举是编程语言中用来定义一组相关的常量的类型。在Objective-C中,我们使用`enum`关键字创建枚举类型;而在Swift中,枚举更加强大,支持关联值、案列方法和原始值等特性。 #### 枚举的...
枚举(Enumeration)是Java中的一个特性,它允许我们创建一组预定义的常量。枚举类型可以看作是一种特殊的类,包含一组固定的实例,这些实例在编译时就已经确定。枚举提高了代码的可读性和安全性,因为枚举值只能是...
cgs枚举枚举分布式计算的一致全局状态的算法。 ===第一次运行=== ant的defalt目标将使用poset:d-100编译并运行程序。 ===使用不同的设置运行=== 编译代码后,使用“ ant run”执行程序。 命令“ ant run”可以采用...
在本案例中,我们将探讨如何利用 XML Schema 的简单类型来实现枚举约束(enumeration constraint)和模式约束(pattern constraint)。 1. 枚举约束(enumeration constraint) 枚举约束允许我们限制 XML 元素的...
### 枚举(Enumeration)知识点总结 #### 一、枚举的概念及意义 枚举是Java 5中引入的一种新特性,它允许开发者定义一种特殊类型的类,用于表示一组固定的常量值。枚举类型提供了类型安全的方式,确保变量只能被...
USB枚举(USB Enumeration)是USB设备接入系统时的一个关键步骤,它允许主机识别和配置新连接的USB设备。枚举过程确保了设备能够与系统正确交互,从而实现数据传输和功能启用。 #### 枚举过程的重要性 USB枚举过程...
信息收集工作整合成自动化脚本。该工具也是纯bash脚本,通用性较好,与LinPEAS类似,但收集的信息不如LinPEAS全面,但会关注一些LinPEAS没有关注到的信息,二者可结合使用,保证提权信息的全面性,防止遗漏。
在Swift编程语言中,`Class`和`Enumeration`(枚举)是两种基本的类型,它们在构建复杂的软件结构中起着至关重要的作用。本篇将深入探讨如何在Swift中使用这两种核心概念。 首先,我们来看`Class`。在面向对象编程中...
在Java编程语言中,枚举(Enumeration)是一种特殊的类,用于定义一组固定的常量。它在许多场景下比使用常量或int值更方便,因为枚举提供了更强的类型安全性和更好的可读性。本资源"Java源码查看枚举类型定义.rar...
Windows枚举 Powershell特权升级枚举脚本。 用法 运行快速标准检查。 .\WindowsEnum.ps1 直接来自CMD powershell -nologo -executionpolicy bypass -file WindowsEnum.ps1 扩展检查将搜索配置文件,各种有趣的...
在编程中,枚举(Enumeration)通常指的是遍历或列举出某个集合中的所有元素。在这个上下文中,枚举托盘图标意味着程序会逐一获取并处理任务栏通知区域(也称为系统托盘)中的所有图标。这些图标通常是系统服务、...
Java 中的枚举(enumeration)是一种特殊的数据类型,它可以表示有限的、固定的常量集。枚举类是一种特殊的类,它的对象是有限的、固定的和不可变的。 枚举的定义 在 Java 中,可以使用两种方式来定义枚举:手动...