Android利用SparseArray替换使用HashMap<Integer,E>

MainActivity如下:

package cc.testsparsearray;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import android.os.Bundle;
import android.util.SparseArray;
import android.app.Activity;
/**
 * Demo描述:
 * SparseArray使用示例
 * 利用SparseArray替换使用HashMap<Integer,E>
 * 类似的还有SparseIntArray,SparseBooleanArray,LongSparseArray
 *
 * 参考资料:
 * 1 http://liuzhichao.com/p/832.html
 * 2 http://blog.csdn.net/xyz_fly/article/details/7931943
 * 3 http://my.eoe.cn/appadventure/archive/2824.html
 *   Thank you very much
 */
public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		init();
	}
    private void init(){

    	SparseArray sparseArray=new SparseArray<String>();

    	//增加的两种方式
    	sparseArray.append(0, "This is 0");
    	sparseArray.append(1, "This is 1");
    	sparseArray.append(2, "This is 2");

    	sparseArray.put(3, "This is 3");
    	sparseArray.put(4, "This is 4");

    	//遍历
    	for (int i = 0; i < sparseArray.size(); i++) {
			System.out.println("遍历得到位置"+i+"的值为:"+sparseArray.get(i));
		}

    	//查找某个位置的键
    	int key =sparseArray.keyAt(1);
    	System.out.println("查找位置1处的键 key="+key);

    	//查找某个位置的值
    	String value=(String) sparseArray.valueAt(1);
    	System.out.println("查找位置1处的值 value="+value);

    	//修改的两种方式
    	sparseArray.put(0, "This is new 0");
    	sparseArray.put(1, "This is new 1");
    	sparseArray.setValueAt(2, "This is new 2");
    	sparseArray.setValueAt(3, "This is new 3");
    	for (int i = 0; i < sparseArray.size(); i++) {
			System.out.println("修改后遍历得到位置"+i+"的值为:"+sparseArray.get(i));
		}

    	//删除
    	sparseArray.delete(0);
    	System.out.println("删除操作后sparseArray大小 size="+sparseArray.size());
    	//注意:
    	//在执行删除后sparseArray的size()减小了1
    	//为了遍历完,应该将循环条件修改为i < sparseArray.size()+1
    	//HashMap也有类似的情况.参见分割线以下的例子
    	//如果关于SparseArray的遍历有什么好的方法或者建议,多谢
    	for (int i = 0; i < sparseArray.size()+1; i++) {
			System.out.println("删除后遍历得到位置"+i+"的值为:"+sparseArray.get(i));
		}

    	System.out.println("//////////////这是分割线////////////////");

    	HashMap<Integer, String> hashMap=new HashMap<Integer, String>();
    	hashMap.put(0, "000");
    	hashMap.put(1, "111");
    	hashMap.put(2, "222");
    	hashMap.put(3, "333");
    	hashMap.put(4, "444");
    	for (int i = 0; i < hashMap.size(); i++) {
			System.out.println("HashMap遍历得到位置"+i+"的值为:"+hashMap.get(i));
		}

    	hashMap.remove(Integer.valueOf(0));
    	System.out.println("删除操作后hashMap大小 size="+hashMap.size());
    	//注意:
    	//在执行删除后hashMap的size()减小了1
    	//为了遍历完,应该将循环条件修改为i < hashMap.size()+1
    	for (int i = 0; i < hashMap.size()+1; i++) {
			System.out.println("HashMap遍历得到位置"+i+"的值为:"+hashMap.get(i));
		}

    	//但是这样做是意义不大的,我们常用的是利用keySet来遍历,如下:
		Set<Integer> set = hashMap.keySet();
		for (Iterator<Integer> iter = set.iterator(); iter.hasNext();) {
			Integer keyTemp = iter.next();
			String valueTemp = hashMap.get(keyTemp);
			System.out.println("利用keySet遍历:"+keyTemp + "的值是" + valueTemp);
		}

    }
}

 

main.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="SparseArray使用示例"
        android:layout_centerInParent="true" />

</RelativeLayout>

 

时间: 2024-11-08 21:37:02

Android利用SparseArray替换使用HashMap&lt;Integer,E&gt;的相关文章

Android中SparseArray性能优化的使用方法_Android

之前一篇文章研究完横向二级菜单,发现其中使用了SparseArray去替换HashMap的使用.于是乎自己查了一些相关资料,自己同时对性能进行了一些测试.首先先说一下SparseArray的原理.   SparseArray(稀疏数组).他是Android内部特有的api,标准的jdk是没有这个类的.在Android内部用来替代HashMap<Integer,E>这种形式,使用SparseArray更加节省内存空间的使用,SparseArray也是以key和value对数据进行保存的.使用的时

Android中SparseArray性能优化的使用方法

之前一篇文章研究完横向二级菜单,发现其中使用了SparseArray去替换HashMap的使用.于是乎自己查了一些相关资料,自己同时对性能进行了一些测试.首先先说一下SparseArray的原理. SparseArray(稀疏数组).他是Android内部特有的api,标准的jdk是没有这个类的.在Android内部用来替代HashMap<Integer,E>这种形式,使用SparseArray更加节省内存空间的使用,SparseArray也是以key和value对数据进行保存的.使用的时候只

Android利用HorizontalScrollView仿ViewPager设计简单相册_Android

最近学习了一个视频公开课,讲到了利用HorizontalScrollView仿ViewPager设计的一个简单相册,其实主要用了ViewPager缓存的思想.此篇文章参考:Android自定义HorizontalScrollView打造超强Gallery效果(这篇文章与公开课的讲的大致一样)  这里简单说一下ViewPager的缓存机制        1.进入ViewPager时,加载当前页和后一页:        2.当滑动ViewPager至下一页时,加载后一页,此时第一页是不会销毁的,同时

Android利用HorizontalScrollView仿ViewPager设计简单相册

最近学习了一个视频公开课,讲到了利用HorizontalScrollView仿ViewPager设计的一个简单相册,其实主要用了ViewPager缓存的思想.此篇文章参考:Android自定义HorizontalScrollView打造超强Gallery效果(这篇文章与公开课的讲的大致一样) 这里简单说一下ViewPager的缓存机制 1.进入ViewPager时,加载当前页和后一页: 2.当滑动ViewPager至下一页时,加载后一页,此时第一页是不会销毁的,同时加载当前页的下一页. 其实就是

Android 利用ViewPager实现图片可以左右循环滑动效果附代码下载_Android

首先给大家展示靓照,对效果图感兴趣的朋友可以继续往下阅读哦. ViewPager这个小demo实现的是可以左右循环滑动图片,下面带索引,滑到最后一页在往右滑动就要第一页,第一页往左滑动就到最后一页,上面是效果图,用美女图片是我一贯的作风,呵呵  1.    首先看一些layout下的xml <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width=&qu

Android利用爬虫实现模拟登录的实现实例

Android利用爬虫实现模拟登录的实现实例 为了用手机登录校网时不用一遍一遍的输入账号密码,于是决定用爬虫抓取学校登录界面,然后模拟填写本次保存的账号.密码,模拟点击登录按钮.实现过程折腾好几个. 一开始选择的是htmlunit解析登录界面html,在pc上测的能实现,结果在android上运行不起来,因为htmlunit利用了javax中的类实现的解析,android不支持javax,所以就跑不起来. 不过pc还是ok的 实例代码: package com.yasin; import jav

udp-关于Android利用局域网进行UDP通信的问题

问题描述 关于Android利用局域网进行UDP通信的问题 我写了一个小程序准备利用UDP和电脑之间进行通信,然后基于这个做一点东西,可是问题是我用AVD测试很好用的,但是用真机测试就是不行.我的思路是让电脑和Android设备连接一台路由器,路由器为两台设备分配固定的ip地址进行通信.拜托大家帮我看看啊,我这才是第一步就郁闷的要死下面是代码.1:MainActivity package com.company.zebork.testudpll; import android.app.Activ

Android 利用mediarecorder录制视频后用ThumbnailUtils类切图返回空

问题描述 Android 利用mediarecorder录制视频后用ThumbnailUtils类切图返回空 如题,因为兼容性问题,将录制时候的MediaRecorder参数如下: recorder = new MediaRecorder(); recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); //指定OutputFo

android利用Zxing扫码后的声音如改变

问题描述 android利用Zxing扫码后的声音如改变 现在的项目里需要两种不同的声音 扫码成功失败各需一种 请问如何修改呢? 解决方案 http://blog.csdn.net/xiaanming/article/details/10163203