2015年11月29日 星期日

ArrayList, HashMap 練習

-----------------------------------
1. ArrayList
-----------------------------------

這些容器類別是實作如 Set 、 List 或 Map 等介面 (interface) 的類別,例如我們會用到的 ArrayList 便是實作 List 介面的。

 C# []、List、Array、ArrayList 區別
1. [] 是針對特定類型、固定長度的
2. 
List 是針對特定類型、任意長度的。
3. Array 是針對任意類型、固定長度的
4. ArrayList 是針對任意類型、任意長度的。
5. Array 和 ArrayList 是通過存儲 object 實現任意類型的(丟什麼東西給ArrayList 它都會變成Object),所以使用時要轉換

 - List、Array、ArrayList 效能比較:
 * Array > List > ArrayList 
 * 功能使用上 List, ArrayList 較 Array 方便。
 * 若是在條件成立下,List<T> 的效能遠勝於 ArrayList ,反之可能相差不遠;所以並不是非選List<T>不可,而是瞭解當時的環境及功能上的需求,再慎選所需的集合,方能取得最佳效能。









ArrayList 型態的參考變數 (reference variable) ,可利用 ArrayList 類別 (class) 的建構子 (constructor):


建構子說明
public ArrayList<E>()建立空的 ArrayList
public ArrayList<E>(int initialCapacity)建立含有 initialCapacity 個元素的空 ArrayList
public ArrayList<E>(Collection<? extends E> c)使用 c 建立 ArrayList

建構子中還有角括號圍起來的 E ,這個 <E> 是指定的型態名稱,這是 Java 5.0 之後加入的泛型 (generic) 的特性,使用類別增加許多彈性,因此不像陣列,指定了資料型態就只能放入指定資料型態的參考變數。

 - ArrayList 的操作依賴方法 (method) ,我們只需要用到其中兩個,如下:


方法說明
boolean add(E e)依序增加元素,索引值遞增
E get(int index)依索引值 index 取得元素
int size()取得大小

add() 是增加 ArrayList 中的元素 (element) , get() 則是取得元素。



範例練習:

 - 範例:將以下 String[] 陣列轉換為 ArrayList.get(position) 的格式取出
String[][] str = { { "list0", "list2" },
                           { "list3", "list4" },
                           { "list5", "list6" },
                           { "list7", "list8" } };


ArrayList
<ArrayList<String>>  list = newArrayList<ArrayList<String>>();
for(int i=0; i<str.lengthi++){
    ArrayList<String> listSub=new ArrayList<String>();
   for(int j=0; j<str[i].length; j++){
         listSub.add(str[i][j]); // 2維陣列存入
      }
    list.add(listSub);
}
System.out.println(list):

ArrayList<List<String>>  list = new ArrayList<List<String>>();

for (String[] array : 
str ){       list .add(Arrays.asList(array));
}

// 
list.size() = 4
參考資料:






-----------------------------------
2. HashMap
-----------------------------------

 - HashMap 必須輸入Key才能取得Value
 - 但是遇到沒有 Key 但是卻想要得到 Value ,這時可以考慮使用 HashMap 中的 keySet() 方法
 - 注意 : 輸出結果的順序並不是依造放入(put)的順序,所以無法跟 ArrayList 一樣有順序性的,他只是把 HashMap 裡的 put 資料全部取出而已,這部分必須要注意。
 - 如果HashMap裡頭有儲存資料則會傳回對應該key的value,HashMap裡沒有資料的話則會傳回 null
 - 若是想讓資料以key值排序可以選擇用TreeMap 但效能是HashMap較佳
 - 可利用HashMap的entrySet()方法取得所有資料然後把這些資料匯入List中做處理

EX1:放入和取出 map key-value 值


HashMap map = new HashMap();

map.put("A", "111");

map.put("B", "222");

map.put("C", "333");

for (Object key : map.keySet()) {
     System.out.println(key + " : " + map.get(key));
}

EX:使用 HashMap 參數來呼叫 PARSE API

HashMap<String, Object> params = new HashMap<String, Object>();
params.put("para1", "test1");
params.put("para2", "test2");

ParseCloud.*callFunctionInBackground*("API1", params, new FunctionCallback<String>() {
            @Override
            public void done(String result, com.parse.ParseException arg1) {
                if (arg1 == null){}
            }
});

參考資料:

沒有留言:

張貼留言