今天优化一段代码,如下

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{}代码不做处理的特点,更改了标志位的状态

转载于:https://www.cnblogs.com/zhangshuli-1989/p/zhangshuli_arraylist_150127922.html

List-ArrayList 使用相关推荐

  1. Java List与ArrayList 的区别(List list =new Arraylist(); ArrayList<String> arrayList = new ArrayList())

    一般想知道List 与ArrayList 的区别可能大部分都是看到了 List list = new ArrayList(); 和 ArrayList arrayList = new ArrayLis ...

  2. List 为什么可以实例化ArrayList

    昨天我带的一个同事问我List 为什么可以实例化ArrayList,刚开始一下萌了(带了快 2个月了) 比如List list = new ArrayList(); List 是一个接口, 接口使用的 ...

  3. ArrayList源码学习

    可增长数组结构 实现: 1. 内部采用数组的方式. 1.1 添加元素,会每次校验容量是否满足, 扩容规则是当前数组长度+当前数组长度的二分之一.容量上限是Integer.MAX_VALUE. copy ...

  4. 比较ArrayList、LinkedList、Vector

    翻译人员: 铁锚 翻译时间: 2013年12月2日 原文链接: ArrayList vs. LinkedList vs. Vector 1. List概述 List,就如图名字所示一样,是元素的有序列 ...

  5. 3月7日 ArrayList集合

    ArrayList与数组的区别: 数组是连续的.同一类型数据的一块区域,而集合可以是不连续的.多种数据类型的. 1.ArrayList ArrayList al = new ArrayList(); ...

  6. 转 java c++互传arraylist

    Java JNI由浅入深(包括:Java和C++互传ArrayList泛型对象参数) 2010-11-25 09:57 1694人阅读 评论(1) 收藏 举报 我们知道Java是一个运行在虚拟机里面的 ...

  7. List and ArrayList

    List<> and ArrayList Class Diagrams Using the Bit Complement of the BinarySearch() Result 代码   ...

  8. java arraylist和list_Java中ArrayList和LinkedList区别

    原文链接:http://pengcqu.iteye.com/blog/502676 一般大家都知道ArrayList和LinkedList的大致区别: 1.ArrayList是实现了基于动态数组的数据 ...

  9. Java 集合框架(二)—— ArrayList

    二.数组列表 -- ArrayList 1.构造方法 ArrayList 是 Java 中的动态数组,底层实现就是对象数组,只不过数组的容量会根据情况来改变. 它有个带 int 类型参数的构造方法,根 ...

  10. ArrayList Iterator remove java.lang.UnsupportedOperationException

    在使用Arrays.asList()后调用add,remove这些method时出现 java.lang.UnsupportedOperationException异常.这是由于Arrays.asLi ...

最新文章

  1. linux 把根目录设置成777权限的补救方法
  2. spark(1.1) mllib 源代码分析
  3. Android 的 ramdisk.img、system.img、userdata.img 作用说明,以及UBoot 系统启动过程
  4. prefixspan java_PrefixSpan序列模式挖掘算法
  5. python正则查找_python正则查找
  6. android toolbar 颜色渐变,android – 如何使渐变形状留在CollapsingToolbarLayout标题后面...
  7. 学习Linux的决心书
  8. nexus本地maven仓库部署及下载
  9. 通俗易懂的虚短、虚断的使用条件?
  10. STM32单片机bootloader扫盲
  11. matlab设置角度和弧度制,matlab 可不可以用角度制不用弧度制?
  12. 医院私有云架构统一灾备中心建设最佳实践
  13. JS利用for多重循环制作9*9乘法表
  14. Django之stark组件1
  15. 服务器装虚拟机要做阵列吗,vm虚拟机做磁盘阵列
  16. springboot:redis报错io.lettuce.core.RedisCommandExecutionException: ERR Client sent AUTH, but no passw
  17. 【Android音视频开发】【032】Android从RTMP流中提取H264和AAC数据进行播放
  18. 网页html通过隐藏域传送数据给web服务器
  19. 关于php内部编码与mysql字符差异问题的研究
  20. Linux实现剪刀石头布游戏,Python剪刀石头布游戏

热门文章

  1. java 0x转中文_Java:转换汉字为unicode形式的字符串和转换unicode形式字符串转换成汉字...
  2. Maven 多模块项目,多个root解决方法
  3. idea 代码自动补全快捷键
  4. 安装mysql为什么下载了很多_mysql下载与安装过程
  5. java怎么不安装到c盘的教程,帮您设置win10系统安装不了java的详细步骤
  6. js里面字符数字和数字相加_「译」5 个奇怪的只会在 JS 里才发生的趣事
  7. Java基础:动态代理
  8. 去停用词 java代码_如何在java中去除中文文本的停用词
  9. 14大招打造你的平面设计创意
  10. tomcat7 https 拒绝连接_Ubuntu上运行Docker提示权限拒绝,如何处理?