“Cursor(游标)”和“Iterator(迭代器)”在概念上很接近,经常容易混,但在不同语境下含义略有差别。可以从通用概念和具体技术场景两个层面来理解它们的关系。
迭代器的本质是:
提供一种顺序访问集合元素的方式,而不暴露集合内部结构。
游标的本质是:
标记“当前位置”的一个指针或句柄,用于逐条访问数据。
所以:
一句话总结:
游标更偏向“数据库 / 底层数据访问”,迭代器更偏向“编程语言中的集合遍历”。
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String s = it.next();
}
特点:
在 Java 中,Cursor 常出现在:
Database Cursor(数据库游标)Cursor(数据库查询结果)Cursor cursor = db.query(...);
while (cursor.moveToNext()) {
String name = cursor.getString(0);
}
这里:
Cursor 本质就是一个数据库结果集的迭代器moveToNext, moveToPrevious)✅ 所以:数据库游标 = 带状态的迭代器
数据库里的 Cursor:
对比:
| 对比项 | 迭代器 | 数据库游标 |
|---|---|---|
| 作用对象 | 内存集合 | 查询结果集 |
| 是否可回退 | 通常不行 | 可以 |
| 是否占资源 | 小 | 可能很大 |
| 是否跨网络 | 否 | 是 |
游标是迭代器在“数据库 / 流式数据”场景下的实现形式;迭代器是游标背后的设计思想。
如果你愿意,我也可以:
你想从哪个角度继续?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。