objectblockiterator.java

来自「cwbbs 云网论坛源码」· Java 代码 · 共 205 行

JAVA
205
字号
package com.cloudwebsoft.framework.base;import org.apache.log4j.Logger;import java.util.Iterator;public class ObjectBlockIterator implements Iterator {    public ObjectBlockIterator() {        try {            jbInit();        } catch (Exception ex) {            ex.printStackTrace();        }    }    public Logger logger = Logger.getLogger(this.getClass().getName());    ObjectDb objectDb;    private Object[] infoBlock;    private int blockID;    private int blockStart;    private String query;    private int startIndex;    private int currentIndex;    private int endIndex;    private Object previousElement = null;    private Object nextElement = null;    String groupKey;        public ObjectBlockIterator(ObjectDb objectDb, Object[] block, String query,                               String groupKey,                               int startIndex, int endIndex) {        this.objectDb = objectDb;        this.infoBlock = block;        this.blockID = startIndex / objectDb.getBlockSize();        this.blockStart = blockID * objectDb.getBlockSize();        this.query = query;        this.currentIndex = startIndex - 1;        this.startIndex = startIndex;        this.endIndex = endIndex;        this.groupKey = groupKey;    }    public void remove() {    }    public boolean hasNext() {                        if (currentIndex == endIndex) {            return false;        }                                if (nextElement == null) {            nextElement = getNextElement();                                    if (nextElement == null) {                return false;            }        }        return true;    }    public boolean hasPrevious() {                if (currentIndex == startIndex) {            return false;        }                        if (previousElement == null) {            previousElement = getPreviousElement();                        if (previousElement == null) {                return false;            }        }        return true;    }    public Object next() throws java.util.NoSuchElementException {        Object element = null;        if (nextElement != null) {            element = nextElement;            this.nextElement = null;        } else {            element = getNextElement();            if (element == null) {                throw new java.util.NoSuchElementException();            }        }                return element;    }    public Object previous() {        Object element = null;        if (previousElement != null) {            element = previousElement;            previousElement = null;        } else {            element = getPreviousElement();            if (element == null) {                throw new java.util.NoSuchElementException();            }        }        return element;    }        private Object getNextElement() {        previousElement = null;        Object element = null;        if (endIndex != Integer.MAX_VALUE) {             while (currentIndex + 1 < endIndex && element == null) {                currentIndex++;                element = getElement(currentIndex);                if (element == null)                    break;                            }        } else {             if (currentIndex + 1 < endIndex) {                currentIndex++;                element = getElement(currentIndex);            }        }                return element;    }    / 当endIndex受攻击很大时,就会使得循环计算很长时间,因此改为当element为null时退出     private Object getNextElement() {       previousElement = null;       Object element = null;       if (endIndex!=Integer.MAX_VALUE) {          while (currentIndex + 1 < endIndex && element == null) {           currentIndex++;           element = getElement(currentIndex);                    }       }       else {          if (currentIndex + 1 < endIndex) {           currentIndex++;           element = getElement(currentIndex);         }       }              return element;     }    */      private Object getPreviousElement() {       nextElement = null;       Object element = null;       while (currentIndex >= startIndex && element == null) {           currentIndex--;           element = getElement(currentIndex);       }       return element;   }        private Object getElement(int index) {                if (index < 0) {            return null;        }                        if (index < blockStart || index >= blockStart + objectDb.getBlockSize()) {                        this.infoBlock = objectDb.getObjectBlock(query, groupKey, index);            this.blockID = index / objectDb.getBlockSize();            this.blockStart = blockID * objectDb.getBlockSize();        }        Object element = null;                        int relativeIndex = index % objectDb.getBlockSize();                if (relativeIndex < infoBlock.length) {            element = objectDb.getObjectDb(infoBlock[relativeIndex]);                    }        return element;    }    private void jbInit() throws Exception {    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?