首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

tomcat 七 源码分析-12 Enumeration枚举

2012-08-25 
tomcat 7 源码分析-12 Enumeration枚举tomcat 7 源码分析-12 Enumeration枚举?Enumeration枚举,就是要把内

tomcat 7 源码分析-12 Enumeration枚举
tomcat 7 源码分析-12 Enumeration枚举

?

Enumeration枚举,就是要把内容没有重复的遍历,而且不破坏原有的存储空间。在http headers的实现中,tomcat实现了一些枚举类。

Enumerate the distinct header names. Each nextElement() is O(n)

?

tomcat 七 源码分析-12 Enumeration枚举
    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的枚举类,验证了下算法

    tomcat 七 源码分析-12 Enumeration枚举
      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();}@Overridepublic boolean hasMoreElements() {// TODO Auto-generated method stubreturn 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++;}@Overridepublic Character nextElement() {// TODO Auto-generated method stubCharacter cur = next;findNext();return cur;}public void PrintAll() {while (hasMoreElements()) {System.out.println(nextElement());}}}?tomcat 七 源码分析-12 Enumeration枚举
        package com.test.Enumerator;public class EnumeratorTest {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubCharacter [] sample = {'a','b','c','d','e','a','a','b'};CharEnumeration che = new CharEnumeration(sample);che.PrintAll();}}?

        ?

热点排行