android cursor循环,Android:Cursor.getColumnIndex()在行循环中是不变的吗?
似乎
android.database.Cursor.getColumnIndex(String)应该在行循环中不变.
然而,我看到大量代码执行以下操作:try (Cursor cursor = database.query(...)) {
while (cursor.moveToNext()) {
String aString = cursor.getString(cursor.getColumnIndex(aColumnName));
// ... other loop code and more repeated use of getColumnIndex()
}
}
这看起来很愚蠢和浪费,除非getColumnIndex()的结果真的随着对cursor.moveToNext()的调用而变化 – 而且这个调用应该从循环中提升出来,如:try (Cursor cursor = database.query(...)) {
int aStringIdx = cursor.getColumnIndex(aColumnName);
while (cursor.moveToNext()) {
String aString = cursor.getString(aStringIdx);
// ... other loop code
}
}
或者在最坏的情况下(假设getColumnIndex()要求您在有效的数据行上):try (Cursor cursor = database.query(...)) {
if (cursor.moveToFirst()) {
int aStringIdx = cursor.getColumnIndex(aColumnName);
do {
String aString = cursor.getString(aStringIdx);
// ... other loop code
} while (cursor.moveToNext());
}
}
那么这里的真实故事是什么?
最佳答案I was seeing all did getColumnIndex each time through the row loop, which made no sense at all
也许是因为当我们执行查询时,我们收到一个SQLiteCursor实例,而不是AbstractCursor.如果我们查看源代码,我们可以在内部找到chache:@Override
public int getColumnIndex(String columnName) {
// Create mColumnNameMap on demand
if (mColumnNameMap == null) {
String[] columns = mColumns;
int columnCount = columns.length;
HashMap map = new HashMap(columnCount, 1);
for (int i = 0; i < columnCount; i++) {
map.put(columns[i], i);
}
mColumnNameMap = map;
}
//...
}
另一方面,访问变量(如示例2)比计算哈希键以获取索引更快.可能是相关的,取决于表的大小.
编辑:在具有复杂查询的大型表上进行测试,似乎改进了5%,在我的情况下不值得进行更改.通常,HashMap缓存足够好.
android cursor循环,Android:Cursor.getColumnIndex()在行循环中是不变的吗?相关推荐
- android cursor 实例化,为什么Cursor放到带参数带返回值方法里就报错?
完整代码如下: 其中有大部分的代码被注释,那是可以成功运行的. 后来我想啊,游戏有好多种,但是需要统计的内容是一样的. 我就想传参 然后获得返回值的方式 来减少代码量啊. 但是把相关的查询代码放到 带 ...
- android双重for循环,Android实现ViewPager无限循环效果(二)
本文实例为大家分享了Android实现ViewPager无限循环效果的第二种方式,供大家参考,具体内容如下 原理:在Adapter中将getCount设置为无限大 package com.xiaoma ...
- android定时循环,Android AlarmManager实现定时循环后台任务
这篇文章使用AlarmManager实现了Android定时后台循环任务.使用场景:项目需要app每隔一段时间就去服务端请求一次接口,从而更新本地保存的信息. AlarmManager简介 Alarm ...
- PLSQL 循环游标 cursor loop fetch into
PLSQL 循环游标 cursor 的一点心得体会 set serveroutput on---------------打印输出信息,默认是FALSE declare ---------------- ...
- 打造一个丝滑般自动轮播无限循环Android库
作者:一包纯牛奶 链接: https://juejin.im/post/5d6bce24f265da03db0790d1 本文由作者授权发布. 这里我把作者两篇文章合体了,主要是为了在项目功能介绍的基 ...
- android高仿京东快报(垂直循环滚动新闻栏)
的android高仿京东快报(垂直循环滚动新闻栏) 标签: 机器人 2016年3月20日03:08 2676阅读人 评论(15)收藏举报 分类: 机器人(71) 版权声明:本文为博主原创文章, ...
- android alarmmanager后台,Android AlarmManager实现定时循环后台任务
这篇文章使用AlarmManager实现了Android定时后台循环任务.使用场景:项目需要app每隔一段时间就去服务端请求一次接口,从而更新本地保存的信息. AlarmManager简介 Alarm ...
- android 从左向右平移_Android实现循环平移动画示例
实现用一张背景图做循环从左往右平移动画. 1.实现两个animation xml文件,一个起始位置在-100%p ,一个在0%p.设置repeat属性为循环,重复. android:repeatMod ...
- android progressbar 循环,Android ProgressBar消失
我有一个不确定的android progressbar,所以它只是一个循环动画. 它开始显示很好,但是在我设置了它的父对象的可见性之后( overlayLayout )若要消失或不可见,然后稍后将其设 ...
- android游戏开发_Android游戏开发–游戏循环
android游戏开发 游戏循环是每个游戏的心跳. 到目前为止,我们仅使用了非常简单的一种(您可以在此处找到),无法控制我们更新游戏状态的速度或速度以及要渲染的帧. 概括地说,最基本的游戏循环是whi ...
最新文章
- 【模型评估与选择】sklearn.model_selection.KFold
- ] 解决myeclipse中新建javaweb工程,无法使用Web App Libraries问题
- 华为全面屏鸿蒙,华为P50pro最新确认:麒麟1020+立体全面屏+鸿蒙系统,这才是华为...
- 网页游戏 服务器 性能测试工具,简单的压力测试工具
- 海量数据处理分析(部分)
- 进程共享变量#pragma data_seg用法
- java lambda::_书评:精通Lambda:多核世界中的Java编程
- RecyclerView滑动到底部自动加载
- python知识点查阅
- notepad++格式化插件安装
- css线条伸缩_CSS3弹性伸缩布局(一)——box布局
- java迷宫算法继承_求Java关于迷宫的算法(用栈实现)
- 【UV打印机】RYPC打印软件教程(一)-软件简介
- 怎么做阿里巴巴国际站的测评?需要哪些技术?
- 字节跳动的“飞阅会”开会模式:先笔谈 后PK 直接生成会议纪要
- 帝国cms安装 mysql支持错误_帝国CMS安装时 mysql出错。
- Contiki教程——进程
- 磁盘与文件系统管理--鸟哥私房菜读书笔记
- 深度学习之残差网络原理深度刨析
- 用51单片机中断控制LED灯亮灭
热门文章
- 电影《冰川时代3》用Sun刀片服务器渲染
- 《视觉SLAM十四讲》-第五章第1节-1-“相机与图像”-“相机模型”-“针孔相机模型”-学习笔记总结
- 8有价值的电子商务网站设计要点
- OA流程 工作流设计
- VCS/Questa SIM 使用流程及Makefile
- 打开excel很慢的解决方法
- 【NOIP practice】BSOJ 3132 卡扎菲 并查集
- 为泄愤程序员攻击北京摇号网站昨受审 曾为市高考状元
- 计算机用户文件夹加密,windows7电脑文件夹怎么加密
- C语言指数函数应用pow n次方