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>