延遲加載的數(shù)據(jù)集合
Posted on 2005-11-19 11:04 canonical 閱讀(333) 評(píng)論(0) 編輯 收藏 所屬分類: Witrix開發(fā)平臺(tái)
在程序中需要返回一個(gè)數(shù)據(jù)集合的時(shí)候, 應(yīng)該盡量選用標(biāo)準(zhǔn)的Java集合類接口,例如List, Map等.
有時(shí)也見到有人選擇返回Iterator對(duì)象, 一般情況下這不是很好的選擇. Iterator對(duì)象的功能有限, 而且存在一種即時(shí)消費(fèi)的特點(diǎn),
我們一般不能把一個(gè)Iterator保存起來留待以后使用. 而且JDK提供的集合類也不能從Iterator直接構(gòu)造出來,例如沒有 new
ArrayList(myIterator), 這樣為數(shù)據(jù)復(fù)制造成一定的困難.
Iterator在理論上的好處之一是可以支持延遲加載數(shù)據(jù), 但是實(shí)現(xiàn)起來比較繁瑣而且單條加載也是比較低效的. 在witrix平臺(tái)中如果需要延遲加載數(shù)據(jù)集合, 我一般選擇使用IPageViewer接口
interface IPageViewer{
public List getAll();
public int getTotalCount();
public List listPage(int startPos, int maxCount);
}
IPageViewer通過getAll()可以轉(zhuǎn)換到List, 也可以通過 new Pager(pageViewer,pageSize).itemIterator()得到單條數(shù)據(jù)的Iterator, 其內(nèi)部采用分頁加載模式. 搜索引擎返回的結(jié)果和數(shù)據(jù)庫查詢的結(jié)果都可以使用這一接口.
Iterator在理論上的好處之一是可以支持延遲加載數(shù)據(jù), 但是實(shí)現(xiàn)起來比較繁瑣而且單條加載也是比較低效的. 在witrix平臺(tái)中如果需要延遲加載數(shù)據(jù)集合, 我一般選擇使用IPageViewer接口
interface IPageViewer{
public List getAll();
public int getTotalCount();
public List listPage(int startPos, int maxCount);
}
IPageViewer通過getAll()可以轉(zhuǎn)換到List, 也可以通過 new Pager(pageViewer,pageSize).itemIterator()得到單條數(shù)據(jù)的Iterator, 其內(nèi)部采用分頁加載模式. 搜索引擎返回的結(jié)果和數(shù)據(jù)庫查詢的結(jié)果都可以使用這一接口.