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

简介: MainActivity如下: package cc.testsparsearray;import java.util.HashMap;import java.

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>


 

相关文章
|
6月前
|
存储 Java Android开发
Android轻量级数据SparseArray详解
Android轻量级数据SparseArray详解
48 0
|
Shell 编译器 C语言
【Android构建篇】MakeFile语法&lt; 1 &gt;
对于一个看不懂Makefile构建文件规则的人来说,这个Makefile语法和shell语法是真不一样,但是又引用了部分shell语法,可以说是shell语法的子类,Makefile语法继承了它。 和shell语法不一样,这个更难一点,而且不太容易懂,所以后续还会持续更新这篇文章。
158 0
【Android构建篇】MakeFile语法&lt; 1 &gt;
|
Shell C语言 Android开发
【Android构建篇】MakeFile语法&lt; 3 &gt;
对于一个看不懂Makefile构建文件规则的人来说,这个Makefile语法和shell语法是真不一样,但是又引用了部分shell语法,可以说是shell语法的子类,Makefile语法继承了它。 和shell语法不一样,这个更难一点,而且不太容易懂,所以后续还会持续更新这篇文章。
113 0
|
存储 Shell 编译器
【Android构建篇】MakeFile语法&lt; 2 &gt;
对于一个看不懂Makefile构建文件规则的人来说,这个Makefile语法和shell语法是真不一样,但是又引用了部分shell语法,可以说是shell语法的子类,Makefile语法继承了它。 和shell语法不一样,这个更难一点,而且不太容易懂,所以后续还会持续更新这篇文章。
149 0
|
存储 Android开发 容器
Android之SparseArray<E>详解
Android之SparseArray<E>详解
152 0
Android之SparseArray<E>详解
|
Android开发
Android SparseArray与ArrayMap
公共类数据Constant.java /** * 常量类 * @author mazaiting * @date 2018/2/7 */ public class Constant { public static final int ...
1139 0
|
存储 API Android开发
SparseArray和ArrayMap替代HashMap
用android 自己的api SparseArray和ArrayMap在有些情况下能带来更好的性能提升。 SparseArray SparseArray 只能存储key为int类型的数据,同时,SparseArray在存储和读取的时候,使用的是二分查找法。
1120 0
|
存储 算法 Java
SparseArray到底哪点比HashMap好
SparseArray是android里为&lt;Interger,Object&gt;这样的Hashmap而专门写的class,目的是提高效率,其核心是折半查找函数(binarySearch)。 HashMap底层是一个Hash表,是数组和链表的集合实现,有需要的可以去看看我关于Hashmap的分析。hashmap源码分析 所以Android开发中官方推荐:当使用HashMap(K,
2064 0