-----------------------------------
1. ArrayList
-----------------------------------
這些容器類別是實作如 Set 、 List 或 Map 等介面 (interface) 的類別,例如我們會用到的 ArrayList 便是實作 List 介面的。
- C# []、List、Array、ArrayList 區別:
1. [] 是針對特定類型、固定長度的。
2. List 是針對特定類型、任意長度的。
3. Array 是針對任意類型、固定長度的。
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>不可,而是瞭解當時的環境及功能上的需求,再慎選所需的集合,方能取得最佳效能。
參考資料:
- C# []、List、Array、ArrayList 區別及應用 :http://blog.xuite.net/hsiung03/blog/63883340-C%23+%5B%5D%E3%80%81List%E3%80%81Array%E3%80%81ArrayList+%E5%8D%80%E5%88%A5%E5%8F%8A%E6%87%89%E7%94%A8
- [C#.NET][VB.NET] ArrayList 與 List<> 執行效能比較:http://www.dotblogs.com.tw/yc421206/archive/2009/10/22/11213.aspx
- 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.length; i++){
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 |
參考資料:
- Java 入門指南 - ArrayList :http://pydoing.blogspot.tw/2011/05/java-arraylist.html
- adapter中的ArrayList取得並修改View :http://www.javaworld.com.tw/jute/post/view?bid=26&id=309785
-----------------------------------
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){}
}
});
參考資料:
- HashMap的應用及資料排序 : http://www.ewdna.com/2008/11/hashmap.html
- JAVA 中 HashMap 列印(取得)全部 Key 與 Value 資料 : http://lolikitty.pixnet.net/blog/post/109319721-java-%E4%B8%AD-hashmap-%E5%88%97%E5%8D%B0(%E5%8F%96%E5%BE%97)%E5%85%A8%E9%83%A8-key-%E8%88%87-value-%E8%B3%87%E6%96%99
沒有留言:
張貼留言