感觉这个集合类,共享一个别人写的集合类。在研究一些技术的时候,需要用到数据库的时候,可以使用该类进行模拟,而不需要和数据库进行耦合了。
 
import java.util.List; 

/** 
* Helper class that implements paging over a collection. 

* @author        Simon Brown 
*/
 
public class Pageable<T> { 

    /** the default page size */ 
    public static final int DEFAULT_PAGE_SIZE = 10; 

    private static final int PAGE_WINDOW = 10; 

    /** the list over which this class is paging */ 
    private List<T> list; 

    /** the page size */ 
    private int pageSize = DEFAULT_PAGE_SIZE; 

    /** the current page */ 
    private int page; 

    /** the starting index */ 
    private int startingIndex; 

    /** the ending index */ 
    private int endingIndex; 

    /** the maximum number of pages */ 
    private int maxPages; 

    /** 
     * Creates a new instance with the specified list. 
     * 
     * @param list        a List 
     */
 
    public Pageable(List<T> list) { 
        this.list = list; 
        this.page = 1; 
        this.maxPages = 1; 

        calculatePages(); 
    } 

    private void calculatePages() { 
        if (pageSize > 0) { 
            // calculate how many pages there are 
            if (list.size() % pageSize == 0) { 
                maxPages = list.size() / pageSize; 
            } else { 
                maxPages = (list.size() / pageSize) + 1; 
            } 
        } 
    } 

    /** 
     * Gets the list that this instance is paging over. 
     * 
     * @return    a List 
     */
 
    public List<T> getList() { 
        return this.list; 
    } 

    /** 
     * Gets the subset of the list for the current page. 
     * 
     * @return    a List 
     */
 
    public List<T> getListForPage() { 
        return list.subList(startingIndex, endingIndex); 
    } 

    /** 
     * Gets the page size. 
     * 
     * @return    the page size as an int 
     */
 
    public int getPageSize() { 
        return this.pageSize; 
    } 

    /** 
     * Sets the page size. 
     * 
     * @param pageSize     the page size as an int 
     */
 
    public void setPageSize(int pageSize) { 
        this.pageSize = pageSize; 
        calculatePages(); 
    } 

    /** 
     * Gets the page. 
     * 
     * @return    the page as an int 
     */
 
    public int getPage() { 
        return this.page; 
    } 

    /** 
     * Sets the page size. 
     * 
     * @param p        the page as an int 
     */
 
    public void setPage(int p) { 
        if (p >= maxPages) { 
            this.page = maxPages; 
        } else if (p <= 1) { 
            this.page = 1; 
        } else { 
            this.page = p; 
        } 

        // now work out where the sub-list should start and end 
        startingIndex = pageSize * (page-1); 
        if (startingIndex < 0) { 
            startingIndex = 0; 
        } 
        endingIndex = startingIndex + pageSize; 
        if (endingIndex > list.size()) { 
            endingIndex = list.size(); 
        } 
    } 

    /** 
     * Gets the maximum number of pages. 
     * 
     * @return    the maximum number of pages as an int 
     */
 
    public int getMaxPages() { 
        return this.maxPages; 
    } 

    /** 
     * Determines whether there is a previous page and gets the page number. 
     * 
     * @return    the previous page number, or zero 
     */
 
    public int getPreviousPage() { 
        if (page > 1) { 
            return page-1; 
        } else { 
            return 0; 
        } 
    } 

    /** 
     * Determines whether there is a next page and gets the page number. 
     * 
     * @return    the next page number, or 0 
     */
 
    public int getNextPage() { 
        if (page < maxPages) { 
            return page+1; 
        } else { 
            return 0; 
        } 
    } 

    /** 
     * Gets the minimum page in the window. 
     * 
     * @return    the page number 
     */
 
    public int getMinPageRange() { 
        if (getPage() > PAGE_WINDOW) { 
            return getPage() - PAGE_WINDOW; 
        } else { 
            return 1; 
        } 
    } 

    /** 
     * Gets the maximum page in the window. 
     * 
     * @return    the page number 
     */
 
    public int getMaxPageRange() { 
        if (getPage() < (getMaxPages() - PAGE_WINDOW)) { 
            return getPage() + PAGE_WINDOW; 
        } else { 
            return getMaxPages(); 
        } 
    } 

}