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 ...
随机推荐
- CSS浏览器兼容问题集(一)
CSS对浏览器的兼容性有时让人非常头疼,也许当你了解其中的技巧跟原理,就会认为也不是难事,从网上收集了IE7,6与Fireofx的兼容性处理方法并整理了一下.对于web2.0的过度,请尽量用xhtml ...
- C++学习笔记31,指向引用的指针(3)
我们来看一个简单的指向引用的指针的样例. #include <iostream> using namespace std; int main(){ int x=10; int y=20; ...
- UVA 10515 - Powers Et Al.(数论)
UVA 10515 - Powers Et Al. 题目链接 题意:求出m^n最后一位数 思路:因为m和n都非常大,直接算肯定是不行的,非常easy想到取最后一位来算,然后又非常easy想到最后一位不 ...
- RenderScript on LLVM笔记
Android 为何引入 Render Script: 3D 可移植 ( 直接用 opengl 也能够移植呀?) 性能 易用性 ( 让 opengl 难入门的人,用 Render Script ?) ...
- Debian9.5 配置x11vnc远程桌面
x11vnc是一个VNC服务器,它允许用户远程查看并用任何VNC查看器与真实的X显示器(即与物理监视器,键盘和鼠标相对应的显示器)进行交互.虽然它的原作者Karl Runge不再开发,但LibVNC和 ...
- R学习:《机器学习与数据科学基于R的统计学习方法》中文PDF+代码
当前,机器学习和数据科学都是很重要和热门的相关学科,需要深入地研究学习才能精通. <机器学习与数据科学基于R的统计学习方法>试图指导读者掌握如何完成涉及机器学习的数据科学项目.为数据科学家 ...
- Scrapy框架使用代理
使用代理抓取https://www.baidu.com/s?wd=ip # -*- coding: utf-8 -*- ''' 一.在settings.py中开启中间件 DOWNLOADER_MIDD ...
- 比JLRoutes更强大更好用的iOS开源路由框架—FFRouter
目前iOS常用路由框架是JLRouter.HHRouter.MGJRouter. 但是这些路由库都各有不足,首先是JLRouter,用不到的功能繁多,而且基于遍历查找URL,效率低下.HHRouter ...
- 一招制胜---详解分布式系统里session同步
一招制胜---详解分布式系统里session同步 几周前,有个盆友问老王,说现在有多台服务器,怎么样来解决这些服务器间的session同步问题?老王一下就来精神了,因为在n年以前,老王还在学校和几个同 ...
- 搭建个人博客 方式2 使用jekyll
孙广东 2016.3.12 环境安装:1.通过 RailsInstaller 来安装 Ruby https://www.ruby-lang.org/zh_cn/documentation/inst ...