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;
}
}
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;
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();
}
}
分享到:
相关推荐
Access-based Enumeration Windows Server 2003安装包
首先,几个有用的oneliners;... 用于渗透测试和CTFLinux枚举工具 该项目的灵感来自并使用了许多测试。 不像LINENUM, lse尝试gradualy揭露根据其重要性从一个privesc点的信息。 它是什么? 该She
Java 实例 - 使用 Enumeration 遍历 HashTable源代码+详细指导教程.zip
linux-smart-enumeration-master.zip
进程、线程枚举,窗体组件调用例程的功能
swift代码-class类和Enumeration枚举的使用
cgs枚举枚举分布式计算的一致全局状态的算法。 ===第一次运行=== ant的defalt目标将使用poset:d-100编译并运行程序。 ===使用不同的设置运行=== 编译代码后,使用“ ant run”执行程序。 命令“ ant run”可以采用...
USB枚举过程 USB Enumeration
信息收集工作整合成自动化脚本。该工具也是纯bash脚本,通用性较好,与LinPEAS类似,但收集的信息不如LinPEAS全面,但会关注一些LinPEAS没有关注到的信息,二者可结合使用,保证提权信息的全面性,防止遗漏。
Windows枚举 Powershell特权升级枚举脚本。 用法 运行快速标准检查。 .\WindowsEnum.ps1 直接来自CMD powershell -nologo -executionpolicy bypass -file WindowsEnum.ps1 扩展检查将搜索配置文件,各种有趣的...
小小的列举进程程序可以把他列举出来,这个是源码
资源分类:Python库 所属语言:Python 资源全名:django-enumeration-0.1.2.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
Intel(R)64 Architecture Processor Topology Enumeration
第10章 结构体和共用体——枚举类型C语言程序设计第10章 结构体和共用体枚举标签枚举数据类型枚举(Enumeration)——一一列举应用场合当某些量仅由有限
matlab代码陷阱集枚举 使用 Cole Impulse 树方法枚举陷阱集“CA Cole、SG Wilson、EK Hall 和 TR Giallorenzi,“寻找 LDPC 码的低错误率的一般方法”,提交给 IEEE Trans. on Inform. Theory,2006 年 6 月。 脉冲...
java枚举类型详细讲解,自己撰写的一本电子书,编写得很详细
首先,几个有用的oneliners;)wget“ https://github.com/diego-treitos/linux-smart-enumeration/raw/master/lse.sh” -O lse.sh;... chmod 700 lse.sh linux-smart-enumeration用于渗透测试和CTFLinux枚举
利用标题:Nosql注入用户名/密码枚举。 作者:Kalana Sankalpa(Anon LK)。 网站: : 怎么跑用法nosqli-user-pass-enum.py [-h] [-u URL] [-up parameter] [-pp parameter] [-op parameters] [-ep parameter] [-sc...