回覆列表
-
1 # 使用者8023806295082
-
2 # 使用者2151701896967
list每次都是透過一條語句直接操作資料庫取出所有的資料返回(並且將物件存入hibernate快取); iterator首先透過一條語句取出所有資料的id,然後透過id在hibernate的一級快取中查詢是否存在該物件,如果存在則直接取出,如果沒有則再次發出一條sql語句透過id取得物件(並且加入到快取中),這樣如果所有的id在快取中都沒有的話就會出現n+1條sql語句的問題。
Iterator和ListIterator主要區別在以下方面:
1. ListIterator有add()方法,可以向List中新增物件,而Iterator不能
2. ListIterator和Iterator都有hasNext()和next()方法,可以實現順序向後遍歷,但是ListIterator有hasPrevious()和previous()方法,可以實現逆向(順序向前)遍歷。Iterator就不可以。
3. ListIterator可以定位當前的索引位置,nextIndex()和previousIndex()可以實現。Iterator沒有此功能。