今天优化一段代码,如下

int num = 0;
boolean skipAppend = false;
int types_ext1[] = new int[] {
ModuleType.TYPE_CONTACT, ModuleType.TYPE_MESSAGE,
ModuleType.TYPE_PICTURE, ModuleType.TYPE_BOOKMARK,ModuleType.TYPE_MUSIC
};
int types_ext2[] = new int[] {
ModuleType.TYPE_CONTACT, ModuleType.TYPE_MESSAGE,
ModuleType.TYPE_PICTURE, ModuleType.TYPE_BOOKMARK,ModuleType.TYPE_CALENDAR
};
int types_ext3[] = new int[] {
ModuleType.TYPE_CONTACT, ModuleType.TYPE_MESSAGE,
ModuleType.TYPE_PICTURE, ModuleType.TYPE_BOOKMARK
};
if(mIsGoogleOrigCalendarExist && mIsGoogleOrigMusicExist){
num = types.length;
for (int i = 0; i < num; i++) {
types_ext[i] = types[i] ;
}
MyLogger.logE("yjp", "music & calendar are not 3rd-party");
} else if(!(mIsGoogleOrigCalendarExist || mIsGoogleOrigMusicExist)){
num = types_ext3.length;
for (int i = 0; i < num; i++) {
types_ext[i] = types_ext3[i];
}
MyLogger.logE("yjp", "music & calendar are 3rd-party");
} else if(!mIsGoogleOrigCalendarExist && mIsGoogleOrigMusicExist){
num = types_ext1.length;
for (int i = 0; i < num; i++) {
types_ext[i] = types_ext1[i];
}
MyLogger.logE("yjp", "calendar is 3rd-party");
} else if(mIsGoogleOrigCalendarExist && !mIsGoogleOrigMusicExist){
num = types_ext2.length;
for (int i = 0; i < num; i++) {
types_ext[i] = types_ext2[i];
}
MyLogger.logE("yjp", "music is 3rd-party");
}

这段代码,其实就是改变int[]里面的元素。因为int[]数组就是增删比较麻烦,只能靠循环提取到另外的数组。所以,我想到了使用list,这样动态改变起来就非常的方便

如下

 ArrayList<Integer> typeList  = new ArrayList<Integer>();
for (int i = 0; i < types.length; i++) {
typeList.add(types[i]);
}
try {
PackageManager pm1 = getPackageManager();
pm1.getPackageInfo("com.android.calendar", PackageManager.GET_ACTIVITIES);
mIsGoogleOrigCalendarExist = true;
} catch (PackageManager.NameNotFoundException e) {
MyLogger.logE("yjp", "google original Calendar not found");
}
try {
PackageManager pm2 = getPackageManager();
pm2.getPackageInfo("com.android.music", PackageManager.GET_ACTIVITIES);
mIsGoogleOrigMusicExist = true;
} catch (PackageManager.NameNotFoundException e) {
MyLogger.logE("yjp", "google original Music not found");
}
if (!mIsGoogleOrigMusicExist) {
typeList.remove(Integer.valueOf(ModuleType.TYPE_MUSIC));
}
if (!mIsGoogleOrigCalendarExist) {
typeList.remove(Integer.valueOf(ModuleType.TYPE_CALENDAR));
}
if (FeatureOption.VANZO_OOS_BROWSER_SUPPORT) {
typeList.remove(Integer.valueOf(ModuleType.TYPE_BOOKMARK));
}
int num = typeList.size();

在修改的时候,遇到了一个问题,就是当我尝试移除一个名为ModuleType.TYPE_BOOKMARK的元素的时候,我使用的方法是typeList.remove(ModuleType.TYPE_BOOKMARK);结果一直报错,说是数组越界。这个是很容易理解的,因为 ModuleType.TYPE_BOOKMARK本身就是一个数值,代码这时候认为你是移除这个位置上的元素。后来改为这个方法,成功了。另外,这个代码中有一点还是非常值得我们学习的。就是

 try {
PackageManager pm1 = getPackageManager();
pm1.getPackageInfo("com.android.calendar", PackageManager.GET_ACTIVITIES);
mIsGoogleOrigCalendarExist = true;
} catch (PackageManager.NameNotFoundException e) {
MyLogger.logE("yjp", "google original Calendar not found");
}

它巧妙的运用了异常以后,对接下来try{}代码不做处理的特点,更改了标志位的状态

List-ArrayList 使用的更多相关文章

  1. 计算机程序的思维逻辑 (38) - 剖析ArrayList

    从本节开始,我们探讨Java中的容器类,所谓容器,顾名思义就是容纳其他数据的,计算机课程中有一门课叫数据结构,可以粗略对应于Java中的容器类,我们不会介绍所有数据结构的内容,但会介绍Java中的主要 ...

  2. 分享个 之前写好的 android 文件流缓存类,专门处理 ArrayList、bean。

    转载麻烦声明出处:http://www.cnblogs.com/linguanh/ 目录: 1,前序 2,作用 3,特点 4,代码 1,前序  在开发过程中,client 和 server 数据交流一 ...

  3. 深入理解java中的ArrayList和LinkedList

    杂谈最基本数据结构--"线性表": 表结构是一种最基本的数据结构,最常见的实现是数组,几乎在每个程序每一种开发语言中都提供了数组这个顺序存储的线性表结构实现. 什么是线性表? 由0 ...

  4. 【干货】用大白话聊聊JavaSE — ArrayList 深入剖析和Java基础知识详解(二)

    在上一节中,我们简单阐述了Java的一些基础知识,比如多态,接口的实现等. 然后,演示了ArrayList的几个基本方法. ArrayList是一个集合框架,它的底层其实就是一个数组,这一点,官方文档 ...

  5. WebAPI接口返回ArrayList包含Dictionary对象正确解析

    一.问题提出 为了减少流量,将key-value(键值对)直接输出到Dictionary<string, string>,接口返回结果如下: 其中{}里面内容如下: 上图显示600是键,4 ...

  6. ArrayList LinkedList源码解析

    在java中,集合这一数据结构应用广泛,应用最多的莫过于List接口下面的ArrayList和LinkedList; 我们先说List, public interface List<E> ...

  7. ArrayList、Vector、LinkedList的区别联系?

    1.ArrayList.Vector.LinkedList类都是java.util包中,均为可伸缩数组. 2.ArrayList和Vector底层都是数组实现的,所以,索引数据快,删除.插入数据慢. ...

  8. ArrayList、Vector、HashMap、HashSet的默认初始容量、加载因子、扩容增量

    当底层实现涉及到扩容时,容器或重新分配一段更大的连续内存(如果是离散分配则不需要重新分配,离散分配都是插入新元素时动态分配内存),要将容器原来的数据全部复制到新的内存上,这无疑使效率大大降低. 加载因 ...

  9. Java中Vector和ArrayList的区别

    首先看这两类都实现List接口,而List接口一共有三个实现类,分别是ArrayList.Vector和LinkedList.List用于存放多个元素,能够维护元素的次序,并且允许元素的重复.3个具体 ...

  10. C#语言基础——集合(ArrayList集合)

    集合及特殊集合 集合的基本信息: System.Collections 命名空间包含接口和类,这些接口和类定义各种对象(如列表.队列.位数组.哈希表和字典)的集合.System.Collections ...

随机推荐

  1. qt 闰年

    bool QDate::isLeapYear ( int year ) [static]

  2. codevs——T1337 银行里的迷宫

     时间限制: 1 s  空间限制: 128000 KB  题目等级 : 白银 Silver 题解       题目描述 Description 楚楚每一次都在你的帮助下过了一关又一关(比如他开宴会). ...

  3. 通过C语言程序改动控制台的背景和前景颜色

    本文主要解说怎样通过C语言来改动dos背景和前景颜色.我们首先来看一下dos的背景颜色的属性. 打开開始菜单,点击执行,弹出执行对话框.输入cmd,回车. (打开dos控制台) 在命令提示符界面下,输 ...

  4. STL 源代码剖析 算法 stl_algo.h -- search

    本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie search --------------------------------------- ...

  5. ADO.Net数据库帮助类

    public interface IDBHelper { /// <summary> /// 执行sql语句 /// </summary> /// <param name ...

  6. POJ 1895 分层图网络流+输出路径

    题意: 题目描述:在公元3141年人类的足迹已经遍布银河系.为了穿越那巨大的距离,人类发明了一种名为超时空轨道的技术.超时空轨道是双向的,连接两个星系,穿越轨道需要一天的时间.然而这个轨道只能同时给一 ...

  7. Linq中where查询

    Linq的Where操作包括3种形式:简单形式.关系条件形式.First()形式. 1.简单形式: 例:使用where查询在北京的客户 var q = from c in db.Customers   ...

  8. unzip---解压缩“.zip”压缩包。

    unzip命令用于解压缩由zip命令压缩的“.zip”压缩包. 语法 unzip(选项)(参数) 选项 -c:将解压缩的结果显示到屏幕上,并对字符做适当的转换: -f:更新现有的文件: -l:显示压缩 ...

  9. 小试VS 2017 开发Python Django项目过程一

    一.新建项目python ->django web 项目 (选择带bootstrap风格与twwriter)项目名称iepiececomputing (ie计件计算)跳出窗体 -> 添加虚 ...

  10. Vim操作的四种模式

    Vim的四种模式一.启动Vim1.双击桌面的图标,就可以启动Vim(是图形界面的)2.在开始菜单---点--运行 接着输入 vim 或者gvim,就可以启动Vim或Gvim了.二.Vim的模式1.Vi ...