Android 개발 에서 효율 적 인 데이터 구 조 는 HashMap 대신 SparseArray 를 사용 합 니 다.

15630 단어 Android
####Android
android , java2ee android Map,List,Set, android , api( ) , ,android api java api

1、SimpleArrayMap ArrayMap

ArrayMap SimpleArrayMap, HashMap api , HashMap , SimpleArrayMap+Map 。

2 HashMap, HashMap , 。

2、SparseArray SparseArrayCompat LongSparseArray

3 , 2 , removeAt , Long 。

3 HashMap, (key) Integer Long , , , ,viewHolder

3、AtomicFile

AtomicFile File , File , AtomicFile , , 。



----
##### SparseArray HashMap
SparseArray android , hashmap , , 。

PS:support SparseArrayCompat, SparseArray , removeAt

[http://stormzhang.com/android/2013/08/01/android-use-sparsearray-for-performance-optimization/](http://stormzhang.com/android/2013/08/01/android-use-sparsearray-for-performance-optimization/ "http://stormzhang.com/android/2013/08/01/android-use-sparsearray-for-performance-optimization/")

、 Hashmap

android , 。 , , , 。 , 。



1>

: HashMap hashMap = new HashMap();

:SparseArray sparseArray = new SparseArray();

2>

:HashMap hashMap = new HashMap

:SparseBooleanArray array = new SparseBooleanArray();

3>

:HashMap hashMap = new HashMap

:SparseIntArray array = new SparseIntArray();



, :


        Button btn = null; // view,
        Button btn02 = null; // view,
        final int KEY = 1;

        /*
         * SparseArray (Sparse
         * array), ( ),
         * 。 , , , 。
         */
        SparseArray array = new SparseArray();


 

2.1


     /* */
        //public void put(int key, E value) {}
        array.put(KEY, btn);
        //public void append(int key, E value){}
        array.append(KEY, btn);


 

2.2


      /* */
        // put , put , , 。
        //public void put(int key, E value)
        array.put(KEY, btn);
        //public void setValueAt(int index, E value)
        array.setValueAt(KEY, btn02);


 

2.3


      /* */
        //public E get(int key)
        array.get(KEY);
        //public E get(int key, E valueIfKeyNotFound)
        // get(int key) get(int key,E valueIfKeyNotFound), , .get(int key) , null。
        array.get(KEY, btn); // key value, 。 default value


 

2.4 ,


      // :
        //public int keyAt(int index)
        array.keyAt(1); // -1


 

2.5 ,


        // :
        //public E valueAt(int index)
        array.valueAt(1);
        // , -1:
        //public int indexOfValue(E value)
        array.indexOfValue(btn);





    package com.kale.pictest;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.util.SparseArray;
    import android.util.SparseBooleanArray;
    import android.view.View;
    import android.widget.Button;
    
    /**
     * @author:
     * @description  :
     * @web : http://stormzhang.com/android/2013/08/01/android-use-sparsearray-for-performance-optimization/
     * @date  :2015 1 19
     */
    public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
        Log.d("TAG", "Max memory is " + maxMemory + "KB");
        
        
        Button btn = null; // view,
        Button btn02 = null; // view,
        final int KEY = 1;

        /*
         * SparseArray (Sparse
         * array), ( ),
         * 。 , , , 。
         */
        SparseArray array = new SparseArray();
        
        /* */
        //public void put(int key, E value) {}
        array.put(KEY, btn);
        //public void append(int key, E value){}
        array.append(KEY, btn);
        
        /* */
        // put , put , , 。
        //public void put(int key, E value)
        array.put(KEY, btn);
        //public void setValueAt(int index, E value)
        array.setValueAt(KEY, btn02);
        
        /* */
        //public E get(int key)
        array.get(KEY);
        //public E get(int key, E valueIfKeyNotFound)
        // get(int key) get(int key,E valueIfKeyNotFound), , .get(int key) , null。
        array.get(KEY, btn); // key value, 。 default value
        
        // :
        //public int keyAt(int index)
        array.keyAt(1); // -1
        
        // :
        //public E valueAt(int index)
        array.valueAt(1);
        // , -1:
        //public int indexOfValue(E value)
        array.indexOfValue(btn);
        
        SparseBooleanArray d;
    }
    }




    public class FragmentPagerItemAdapter extends FragmentPagerAdapter {

    private final FragmentPagerItems mPages;
    private final SparseArrayCompat> mHolder;

    public FragmentPagerItemAdapter(FragmentManager fm, FragmentPagerItems pages) {
        super(fm);
        mPages = pages;
        mHolder = new SparseArrayCompat<>(pages.size());
    }

    @Override
    public int getCount() {
        return mPages.size();
    }

    @Override
    public Fragment getItem(int position) {
        return getPagerItem(position).instantiate(mPages.getContext(), position);
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        Object item = super.instantiateItem(container, position);
        if (item instanceof Fragment) {
            mHolder.put(position, new WeakReference((Fragment) item));
        }
        return item;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        mHolder.remove(position);
        super.destroyItem(container, position, object);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return getPagerItem(position).getTitle();
    }

    @Override
    public float getPageWidth(int position) {
        return super.getPageWidth(position);
    }

    public Fragment getPage(int position) {
        final WeakReference weakRefItem = mHolder.get(position);
        return (weakRefItem != null) ? weakRefItem.get() : null;
    }

    protected FragmentPagerItem getPagerItem(int position) {
        return mPages.get(position);
    }

    }

좋은 웹페이지 즐겨찾기