今天优化一段代码,如下

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. X的追求道路

    X的追求道路 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 X在大家的帮助下最终找到了一个妹纸,于是開始了漫漫的追求之路,那 ...

  2. PHP开发环境&amp;MySQL下载安装及配置流程

    PHP开发环境&MySQL下载安装及配置流程 因工作须要,从0開始学PHP,前几天看完视频教程后開始搞开发环境,到今天才好.这里把安装配置流程梳理一下分享出来. 一.概述 要搭建一个开发环境无 ...

  3. iBatis框架使用 4步曲

    iBatis是一款使用方便的数据訪问工具,也可作为数据持久层的框架.和ORM框架(如Hibernate)将数据库表直接映射为Java对象相比.iBatis是将SQL语句映射为Java对象. 相对于全自 ...

  4. 基于express+redis高速实现实时在线用户数统计

    作者:zhanhailiang 日期:2014-11-09 本文将介绍怎样基于express+redis高速实现实时在线用户数统计. 1. 在github.com上创建项目uv-tj.将其同步到本地: ...

  5. 从C10K到C10M高性能网络的探索与实践

    在高性能网络的场景下,C10K是一个具有里程碑意义的场景,15年前它给互联网领域带来了非常大的挑战.发展至今,我们已经进入C10M的场景进行网络性能优化. 这期间有怎样的发展和趋势?环绕着各类指标分别 ...

  6. 21.MFC进制转换工具

    相关代码:链接:https://pan.baidu.com/s/1pKVVUZL 密码:e3vf #include <stdlib.h> #include <stdio.h> ...

  7. Android studio 导入PullToRefresh

    1.新建一个Android项目,下载好Android-PullToRefresh-master,并解压,找到library文件夹,我把他放在C:\import目录下,下面的都是根据箭头一步一步的点击即 ...

  8. SCOPE_IDENTITY()和 SELECT @@IDENTITY 的用法

    这俩个,是在插入数据的时候使用,返回刚刚插入数据行的ID 大家慎用@@IDENTITY,而尽量采用 SCOPE_IDENTITY() 函数替换之. SCOPE_IDENTITY()  也是得到最后一条 ...

  9. VBA关闭工作簿和退出Excel

    VBA关闭工作簿和退出Excel链接:http://www.excelpx.com/thread-233045-1-1.html 兰色幻想VBA基础入门和高级开发全套80集视频教程,助你成为VBA开发 ...

  10. Copying GC (Part two :Multi Space Copying GC)

    目录 近似深度优先搜索方法 Cheney的GC复制算法 前提 执行结果 多空间复制算法 multi_space_copying()函数 mark_or_copy() copy() 执行过程 优缺点 近 ...