그냥가자님 조언으로 clone 문제를 해결(?)한거 같은데 원하는 결과가 안나오네요.
sba.clear() 후에 다른값을 넣기전에 찍어보면 원하는 값이 나온는데 , sba 에먼가를 넣으면 값이 이상해지는거 같네요.
clone()를 잘못 쓴건지...SparseBooleanArray 가 특별한건지...
어디를 손봐야 값을 set 한후에 원할때 get를 하면 원하는 결과를 얻을까요?
지금 현재 결과는 012 012 34567 453 34567 이 나오는데 012 012 34567 012 34567 가 원하는 값입니다.
public class TestActivity extends Activity{
 private CheckedItems checkedItems = new CheckedItems();
 //private SparseBooleanArray sba = new SparseBooleanArray();
 private CopyItem sba = new CopyItem();
 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("MyTag", "======================== ");
        sba.put(0, true);
        sba.put(1, false);
        sba.put(2, true);
        checkedItems.setChecked(0, (SparseBooleanArray) sba.clone());
        for(int i = 0 ; i < checkedItems.getChecked(0).size() ; i++ ){
         Log.d("MyTag", checkedItems.getChecked(0).keySet().toArray()[i]+"    (page:0)");
        }
        Log.d("MyTag", sba.hashCode()+"   sba");
        Log.d("MyTag", sba.clone().hashCode()+ "   clone");
        sba.clear();
        for(int i = 0 ; i < checkedItems.getChecked(0).size() ; i++ ){
         Log.d("MyTag", checkedItems.getChecked(0).keySet().toArray()[i]+"    (page:0)");
        }
        Log.d("MyTag", "======================== ");
        
        sba.put(3, true);
        sba.put(4, false);
        sba.put(5, false);
        sba.put(6, true);
        sba.put(7, false);
        checkedItems.setChecked(1, (SparseBooleanArray) sba.clone());
        for(int i = 0 ; i < checkedItems.getChecked(1).size() ; i++ ){
         Log.d("MyTag", checkedItems.getChecked(1).keySet().toArray()[i]+"    (page:1)");
        }
        Log.d("MyTag", sba.hashCode()+"   sba");
        Log.d("MyTag", sba.clone().hashCode()+ "   clone");
        sba.clear();
        Log.d("MyTag", sba.size()+ "   size");
        Log.d("MyTag", "======================== ");
        for(int i = 0 ; i < checkedItems.getChecked(0).size() ; i++ ){
         Log.d("MyTag", checkedItems.getChecked(0).keySet().toArray()[i]+"   (page:0)");
        }
        Log.d("MyTag", sba.hashCode()+"   sba");
        Log.d("MyTag", sba.clone().hashCode()+ "   clone");
        Log.d("MyTag", "======================== ");
        
        for(int i = 0 ; i < checkedItems.getChecked(1).size() ; i++ ){
         Log.d("MyTag", checkedItems.getChecked(1).keySet().toArray()[i]+"    (page:1)");
        }
        Log.d("MyTag", sba.hashCode()+"   sba");
        Log.d("MyTag", sba.clone().hashCode()+ "   clone");
        Log.d("MyTag", "======================== ");
 }
 class CheckedItems{
  private Map<Integer, SparseBooleanArray> copy;
       
  CheckedItems(){
  
   copy = new HashMap<Integer, SparseBooleanArray>(); 
  
  }
  public void setChecked(int key, SparseBooleanArray sba){
  
   copy.put(key, sba);
   
   /*
    *setChecked에 올바른 값이 들어갔는지 확인용
    * 
   for(int i = 0 ; i < checkedItems.getChecked(key).size() ; i++ ){
          Log.d("MyTag", checkedItems.getChecked(key).keySet().toArray()[i]+"  setChecked");
         }
         */
  }
  
  public Map<Integer, Boolean> getChecked(int key){
   Map<Integer, Boolean> checkedItemsBoolean = new HashMap<Integer, Boolean>();
   for(int i = 0 ; i < copy.get(key).size() ; i++){
    checkedItemsBoolean.put(copy.get(key).keyAt(i),
      copy.get(key).get(copy.get(key).keyAt(i)));
   }
   return checkedItemsBoolean;
  }
 }
 
 class CopyItem extends SparseBooleanArray implements Cloneable{
  private static final long serialVersionUID = 1L;
  public CopyItem() {
   super();
   // TODO Auto-generated constructor stub
  }
  public Object clone(){                       
   Object o = null;                   
   try{                      
    o = super.clone();               
   }catch (Exception e){System.out.println("can't clone object");}
   
   return o;  
  }
 }
}