List-ArrayList 使用
今天优化一段代码,如下
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 使用的更多相关文章
- 计算机程序的思维逻辑 (38) - 剖析ArrayList
从本节开始,我们探讨Java中的容器类,所谓容器,顾名思义就是容纳其他数据的,计算机课程中有一门课叫数据结构,可以粗略对应于Java中的容器类,我们不会介绍所有数据结构的内容,但会介绍Java中的主要 ...
- 分享个 之前写好的 android 文件流缓存类,专门处理 ArrayList、bean。
转载麻烦声明出处:http://www.cnblogs.com/linguanh/ 目录: 1,前序 2,作用 3,特点 4,代码 1,前序 在开发过程中,client 和 server 数据交流一 ...
- 深入理解java中的ArrayList和LinkedList
杂谈最基本数据结构--"线性表": 表结构是一种最基本的数据结构,最常见的实现是数组,几乎在每个程序每一种开发语言中都提供了数组这个顺序存储的线性表结构实现. 什么是线性表? 由0 ...
- 【干货】用大白话聊聊JavaSE — ArrayList 深入剖析和Java基础知识详解(二)
在上一节中,我们简单阐述了Java的一些基础知识,比如多态,接口的实现等. 然后,演示了ArrayList的几个基本方法. ArrayList是一个集合框架,它的底层其实就是一个数组,这一点,官方文档 ...
- WebAPI接口返回ArrayList包含Dictionary对象正确解析
一.问题提出 为了减少流量,将key-value(键值对)直接输出到Dictionary<string, string>,接口返回结果如下: 其中{}里面内容如下: 上图显示600是键,4 ...
- ArrayList LinkedList源码解析
在java中,集合这一数据结构应用广泛,应用最多的莫过于List接口下面的ArrayList和LinkedList; 我们先说List, public interface List<E> ...
- ArrayList、Vector、LinkedList的区别联系?
1.ArrayList.Vector.LinkedList类都是java.util包中,均为可伸缩数组. 2.ArrayList和Vector底层都是数组实现的,所以,索引数据快,删除.插入数据慢. ...
- ArrayList、Vector、HashMap、HashSet的默认初始容量、加载因子、扩容增量
当底层实现涉及到扩容时,容器或重新分配一段更大的连续内存(如果是离散分配则不需要重新分配,离散分配都是插入新元素时动态分配内存),要将容器原来的数据全部复制到新的内存上,这无疑使效率大大降低. 加载因 ...
- Java中Vector和ArrayList的区别
首先看这两类都实现List接口,而List接口一共有三个实现类,分别是ArrayList.Vector和LinkedList.List用于存放多个元素,能够维护元素的次序,并且允许元素的重复.3个具体 ...
- C#语言基础——集合(ArrayList集合)
集合及特殊集合 集合的基本信息: System.Collections 命名空间包含接口和类,这些接口和类定义各种对象(如列表.队列.位数组.哈希表和字典)的集合.System.Collections ...
随机推荐
- linux6 安装oracle11g
转自:http://blog.csdn.net/nhm_lxy/article/details/37813789 安装环境: 虚拟机VMware Workstation 10.0 操作系统: ...
- 【Uva 11400】Lighting System Design
[Link]: [Description] 你要构建一个供电系统; 给你n种灯泡来构建这么一个系统; 每种灯泡有4个参数 1.灯泡的工作电压 2.灯泡的所需的电源的花费(只要买一个电源就能供这种灯泡的 ...
- hdu(1069)——Monkey and Banana(LIS变形)
题意: 如今给你n个石块,然后它由坐标来表示(x,y,z).可是它能够有不同的方法,也就是说它的三个坐标能够轮换着来的. 石块的数量不限,可是每次都必须保持上底面的长和宽严格递减,然后问你用这些石块所 ...
- JSR 303 - Bean Validation 简单介绍及用法
一.JSR-303简单介绍 JSR-303 是 JAVA EE 6 中的一项子规范.叫做 Bean Validation,官方參考实现是Hibernate Validator. 此实现与 Hibern ...
- Lesson 1 Basic Concepts: Part 2
Getting your web site ‘live’ on the Web With the nerd background details under our belts, we can now ...
- .Net商品管理(注释,百度,提问,对比,总结)
管理控制器 using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sys ...
- Spring security工作流程及集成
A user enters their username and password into a login screen and clicks a login button. The entered ...
- Vue中对data的操作
1. {{a}} var vm = new Vue({ el: '#app', data: { a: { a: 1, b: 2 } } }) vm.a.c = 'sadoisad' // 按理说是 ...
- PHP获取上周五时间简单写法
1.echo date('Y-m-d',strtotime('last friday')); 2.echo date("Y-m-d H:i:s",mktime(0, 0 , 0,d ...
- 用Understand阅读 VS2010项目源码
一.查看vs2010项目 打开understand,File-New-Project...-Next-Next [向导第三步,选"Import Visual Sudio project fi ...