###### tags: `Tibame-java入門班`
# java假日班-0306-Collectiond-Map
vector類別
有五種寫法
```
/**
* Vector 為一可置入"任意物件"的"動態陣列"(可隨內含物多寡增減其長度)
* Vector 提供同步化的優點(與負擔) , 這對多執行緒的存取是很重要的
*/
import java.util.*;
public class TestVector_Enumeration {
public static void main(String args[]) {
Vector list = new Vector();
list.add(new Integer(12));
list.add(new Long(34L));
list.add(new Float(5.6f));
list.add(new Double(7.8));
list.add(new String("Hello"));
for (int i = 0; i < list.size(); i++) {
Object obj = list.get(i);
System.out.println(obj);
}
// JDK1.2後,Vector也可以用Iterator取值.
// 因為List家族可以用Iterator或for迴圈取值
System.out.println();
Iterator it = list.iterator();
while (it.hasNext())
System.out.println(it.next());
System.out.println(); // ●或再利用JDK 1.5 的for-each取值
for (Object value : list)
System.out.println(value);
// 其它方法取值1 -> toArray()
System.out.println();
Object a[] = list.toArray();
for (int i = 0; i < a.length; i++)
System.out.println(a[i]);
// JDK 1.0其它方法取值2 -> elements()
// 只有 Vector 才有此method, 故呼叫此method時不能用多型的寫法
System.out.println();
Enumeration en = list.elements();
while (en.hasMoreElements())
System.out.println(en.nextElement());
}
}
```
Hashtable類別
有五種取值方法
```
/**
1.Hashtable 內部是一個"類似表格"的資料結構來儲存資料, 每一筆資料都有
對應的索引鍵(key) , 這索引鍵是物件的型態 , 但是通常為方便起見, 大
部份的情況都是利用"字串"值當做索引鍵(key). 反之當欲取出這筆資料時,
也是利用剛剛所設定的索引鍵值來取出資料
2.欲儲存不同的資料時必需用不同的索引鍵, 否則其索引鍵所對應資料值為最
後儲存的那筆資料
3.Hashtable 的資料也是物件的型態, 所以可以儲存任何形式的資料, 使用者
取出資料的同時, 必須注意該資料的型態而自行作物件資料轉換(casting)的動作.
*/
import java.util.*;
public class TestHashtable_Enumeration {
public static void main(String args[]) {
Hashtable map = new Hashtable();
map.put("one", new Integer(1));
map.put("two", "2");
map.put("three", new Float(3.0));
Integer oneValue = (Integer) map.get("one");
String twoValue = (String) map.get("two");
Float threeValue = (Float) map.get("three");
System.out.println(oneValue);
System.out.println(twoValue);
System.out.println(threeValue);
// 應測試改用keySet()的作法看看
// 取出所有的key(keyset),包裝為Set的型態
/**
* keySet() 方法來自Map介面, 所以所有Map家族成員都適用此方式取值 , 因此Hashtable類別也當然適用
*/
System.out.println();
Set keyset = map.keySet();// 取出所有的key(keyset),包裝為Set的型態
Iterator keys = keyset.iterator();
while (keys.hasNext())
System.out.println(map.get(keys.next()));
// 應測試改用values()的作法看看
// 取出所有的value,包裝為Collection的型態
/**
* values() 方法來自Map介面, 所以所有Map家族成員都適用此方式取值 , 因此Hashtable類別也當然適用
*/
System.out.println();
Collection c = map.values();// 取出所有的value,包裝為Collection的型態
Iterator values = c.iterator(); // ●再利用Iterator介面取值
while (values.hasNext())
System.out.println(values.next());
System.out.println(); // ●或再利用JDK 1.5 的for-each取值
for (Object value : c)
System.out.println(value);
// JDK 1.0其它方法取值 -> elements()
// 只有 Hashtable 才有此method, 故呼叫此method時不能用多型的寫法
System.out.println();
Enumeration vals = map.elements();
while (vals.hasMoreElements())
System.out.println(vals.nextElement());
// 取出所有的key -> keys()
// 只有 Hashtable 才有此method, 故呼叫此method時不能用多型的寫法
System.out.println();
System.out.println("所有的keys如下:");
Enumeration ekeys = map.keys();
while (ekeys.hasMoreElements()) {
System.out.println(ekeys.nextElement());
}
}
```
Map介面(介面宣告)

P55



所有Map內的家族都可以使用Set

TreeMap依照Key的大小為排序。

Hash>>亂,快
Linked>>依加入順序排序
Tree>>依大小排序(限制:需同類型、實作Comparable)
→TreeMap用Key排大小
泛型

自訂泛型

---
<<以下參考用>>
?的目的,在泛型內的指定類別內,使用所有型態就可以用<?>。


都是Number的子類別

使用<?>萬用字元的範例


不使用?的方法。

---
自動裝箱/拆箱

L1-P164頁有說明
現在寫法(精簡)

以前寫法(現在會跑出警告,但是還是能執行)

增強型For迴圈(for-each)
(泛型跟For-Loop為絕配)
Array

Collection

增強型For迴圈無計次,也無法倒退。
無法取代傳統For迴圈

for-each要反轉排序,需借外力。

```
import java.util.*;
public class ForeachExample4_payAttation {
public static void main(String[] args){
List<String> data = new ArrayList<String>();
data.add("吳永志1");
data.add("吳永志2");
data.add("吳永志3");
for(int i=data.size()-1; i>=0; i--)
System.out.println(i+": "+data.get(i));
System.out.println();
Collections.reverse(data);//做反轉用
for(String str : data) //※以上我做不到
System.out.println(str); //※傳統for迴圈, 薑老的辣
}
}
```
HashMap(亂排序)

TreeMap(大小排序)

```
/*
底下是一個尋訪Map的所有value 的 Enhanced foreach 迴圈。
當然,因為用 HashMap,所以並沒有什麼順序(TreeMap,則有順序)
*/
import java.util.*;
public class ForeachExample3_Map {
public static void main(String[] args) {
//Map<Integer , String> map = new HashMap<Integer , String>();
Map<Integer , String> map = new TreeMap<Integer , String>();
for (int i = 0; i < 6; i++) {
map.put( i , "吳永志" + i );
}
for (String val : map.values()) {
System.out.println(val);
}
System.out.println("--------------------------------------------------");
Collection<String> c = map.values();//泛型標準寫法
for (String val : c {
System.out.println(val);
}
System.out.println("--------------------------------------------------");
Set<Integer> s = map.keySet();//泛型標準寫法
for (Integer mykey : s) {
System.out.println(mykey);//取KEY
}
System.out.println("--------------------------------------------------");
for (Integer mykey : s) {
System.out.println(mykey+"="+map.get(mykey));//取KEY與值
}
System.out.println("--------------------------------------------------");
//toString應用
System.out.println(map);
}
}
/*HashMap
輸出結果:
吳永志2
吳永志4
吳永志1
吳永志3
吳永志5
吳永志0
*/
/*HTreeMap
輸出結果:
吳永志0
吳永志1
吳永志2
吳永志3
吳永志4
吳永志5
*/
```



可傳入動態參數

用contains判斷單個,containsAll判斷是否全部含有

remove,removeall(移除)

---

IO-創建資料夾
(左邊放目錄,右邊放檔案)

最後顯現出答案是最後的名稱



無指名哪個地方,會在當前目錄找


執行前

執行後

執行前

執行後

