Java 類集框架(Set, List, Map)的使用
雖然面試的要求是要知道HashMap是怎么實現的,令人望而卻步,但搞明白它怎么用,就成功了一小半。
什么是類集框架
-
是一組類和接口
-
位于java.util包中
-
主要用于存儲和管理對象
-
主要分為三大類--集合、列表和映射
-
集合中的對象不按特定的方式排序,并且沒有重復對象。和數學中集合的概念類似。(如果添加了重復的對象,會怎樣呢?并不會報錯,但重復的元素只算一個)。
-
列表中的對象按照索引位置排序,可以有重復對象。
-
映射中的每一個元素包含一個鍵對象和一個值對象,即鍵值對。鍵不可以重復,值可以重復。
-
注意這些接口及其實現類的繼承關系:

Collection 和 Iterator接口
Set 接口和 List 接口都是 Collection 的子接口,因此我們先看看Collection 接口中有什么方法:
| 方法名 | 作用 |
|---|---|
| boolean add(Object o) | 向集合中加入一個對象 |
| void clear() | 刪除集合中的所有對象 |
| boolean isEmpty() | 判斷集合是否為空 |
| remove(Object o) | 從集合中刪除一個對象的引用 |
| int size() | 返回集合中元素的數目 |
Set有一個實現類,就是HashSet,它是Set中我們最常用的。下面我們舉一個例子,在HashSet中使用這些方法。
Set 和 HashSet的使用方法
//導包時少用*,寫明確一點,方便查錯和閱讀
import java.util.Set;
import java.util.HashSet;
public class Test {
public static void main(String args []) {
//把具體的實現類向上轉型為接口類型,方便接收參數,即:
//HashSet<String> hashSet = new HashSet<String>();
//Set<String> set = hashSet;
Set<String> set = new HashSet<String>();
set.add("a");
set.add("b");
set.add("c");
set.add("d");
System.out.println("Size: " + set.size());
//重復添加元素,會怎樣呢?
set.add("c");
System.out.println("Size with two c: " + set.size());
set.remove("a");
System.out.println("Size after remove: " + set.size());
set.clear();
System.out.println("Size after clear: " + set.size());
System.out.println("Is empty: " + set.isEmpty());
}
}
運行結果:

如何遍歷 Set
集合是無序的,所以不能像數組或者List那樣,根據下標輸出其中的元素,因此我們需要使用迭代器 Iterator。
由最前面的圖可以看出,它們之間的繼承關系是:Iterator <-- Collection <-- Set <-- HashSet.
Iterator 的常用方法有:
- hasNext():判斷迭代器當中,還有沒有下一個元素
- next():返回迭代器當中的下一個元素
遍歷Set的方法:
生成迭代器對象:Iterator it = set.iterator() ,這個迭代器對象可以把set中的元素都取出來。
iterator() 方法屬于 collection 接口,所以 collection 的子接口 set 中, 必然有 iterator() 方法。
import java.util.Iterator;
import java.util.Set;
import java.util.HashSet;
public class Test {
public static void main(String args []) {
Set<String> set = new HashSet<String>();
set.add("a");
set.add("b");
set.add("c");
set.add("d");
Iterator<String> it = set.iterator();
while(it.hasNext())
System.out.println(it.next());
}
}
運行結果:

Map 和 HashMap的使用方法
由一開始的類圖可以看出,Map并沒有繼承Collection接口,是一個單獨的接口。
Map中的重要方法:
- put(K key, V value): 把鍵值對放入Map
- get(Object key): 返回當前鍵對應的值
- 其他方法與Collection中類似,比如remove(), clear()
一個簡單的例子:
import java.util.Map;
import java.util.HashMap;
public class Test {
public static void main(String args []) {
Map<String, String> map = new HashMap<String, String>();
map.put("1", "a");
map.put("2", "b");
map.put("3", "c");
map.put("4", "d");
//如果有重復的鍵,后面的值會覆蓋前面的
map.put("3", "e");
System.out.println(map.size());
System.out.println(map.get("3"));
}
}
運行結果:

來自:http://www.jianshu.com/p/305c3ac8b17a