今天优化一段代码,如下

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. 洛谷 P2839 畅通工程

    P2839 畅通工程 题目描述 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连, ...

  2. MapReduce JOB 的输出与输出笔记。

    提高 MapReduce 价值,自定义输入和输出. 比如跳过存储到 HDFS 中这个耗时的布置. 而只是从原始数据源接受数据,或者直接将数据发送给某些处理程序. 这些处理程序在 MapReduce 作 ...

  3. 特定位取反(js实现)

    去华为面试的时候.没有做好准备工作.面试的流程没有问清也没有查,结果一过去就让上机做题,着实有点措手不及.笔者是擅长前端的Java Webproject师啊,主要的底层编程知识早已生疏了.机试题碰到了 ...

  4. Linux打包免安装的Qt程序(编写导出依赖包的脚本copylib.sh,程序启动脚本MyApp.sh)

    本文介绍如何打包Qt程序,使其在没有安装Qt的系统可以运行. 默认前提:另外一个系统和本系统是同一个系统版本. 1,编写导出依赖包的脚本copylib.sh #!/bin/bash LibDir=$P ...

  5. c#时间差高精度检查

    两个时间差的高精度检查 static void Main(string[] args) { Console.WriteLine("开始时间:" + DateTime.Now.ToS ...

  6. [Chromium文档转载,第006章]Chrome IPC To Mojo IPC Cheat Sheet

    For Developers‎ > ‎Design Documents‎ > ‎Mojo‎ > ‎ Chrome IPC To Mojo IPC Cheat Sheet 目录 1 O ...

  7. Android的SQLite的增删查改

    原创作品,允许转载,转载时请务必声明作者信息和本声明.http://www.cnblogs.com/zhu520/p/8343675.html 本人小白,那个大神看到有问题可指出,谢谢.... 一:s ...

  8. 【Henu ACM Round#14 A】Vitaly and Night

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 连续两个如果不全是0就递增cnt [代码] #include <bits/stdc++.h> using namespa ...

  9. CodeForcesGym 100502G Outing

    Outing Time Limit: 1000ms Memory Limit: 524288KB This problem will be judged on CodeForcesGym. Origi ...

  10. WPF和WinForm的区别, 数据驱动与事件驱动的优势对比

    Winform中针对界面的元素进行操作, 所有业务都关联在当前窗口的后台, 而在此之前, 无奈你是双击事件的添加方式.还是后台绑定事件的方式, 你都需要给每个元素一个固定规范的名称, 然后进行相关的数 ...