Java容器的總結整理

Java容器指的是List,Set,Map這些類。由於翻譯的問題,問到集合,Collection這些指的都是它們幾個。

List

ArrayList 隨機訪問快

LinkedList 插入刪除快

這個好理解,array嘛就是數組,隨機訪問快。link嘛就是鏈表,當然是插入刪除快了。

Set 每個元素只能放一次

HashSet 使用散列

TreeSet 使用紅黑樹,會對元素排序,接口是SortedSet。初始化TreeSet時可以傳入Comparator對象的實現做爲排序函數

LinkedHashSet 也使用散列,但使用鏈表來維護插入順序

Set的訪問順序

HashSet按照HashCode的順序

TreeSet對元素排序有兩種方法:

1、對象 implements Comparable。

2、new TreeSet傳入參數T extends Comparator。

易錯點:兩個不要搞反了。在創建TreeSet的時候可以不初始化任何排序方法,此時不會報錯。但添加對象進去的時候就會報錯了,提示cannot be cast to java.lang.Comparable

LinkedHashSet按照插入的次序顯示

關於HashCode

HashCode是一個int數值,同一個對象要求在get和put的HashCode是同一個。不同對象的HashCode不要求必須不同,只要equals方法能區分開就可以了。

一個實用的HashCode應該是基於對象內容的,並且分佈平均的

Map相同的key只能放一次。這個key使用key對象的equals來判斷是否重複

HashMap 類似HashSet,按key的HashCode存放

LinkedHashMap 可以按照插入次序存放,或者最近最少使用LRU順序存放。比HashMap慢一點,但迭代訪問時更快

TreeMap 類似TreeSet,基於紅黑樹排序

此外還有WeakHashMap, ConcurrentHashMap, IdentityHashMap

各種容器的遍歷

List<Integer> list = new ArrayList<Integer>; 
//使用Iterator遍歷。缺點是不能隨機訪問 
Iterator iter = list.iterator; 
while(iter.hasNext) { 
Integer i = (Integer) iter.next; 
}
//這個比較好。不過注意調用get(i)的時候千萬不要超出List的長度範圍,尤其是進行刪除操作之後!
for(int i=0; i<list.size; i++) { 
Integer n = list.get(i); 
}
for(Integer i : list) { 
//可以直接對i操作 
//java8的forEach和lambda表達式組合是最牛的。適合遍歷輸入或者操作。
list.forEach(s -> System.out.println(s));
HashSet<Integer> iset = new HashSet<Integer>; 
iset.add(3); 
iset.add(8); 
iset.add(7); 
iset.add(11); 
//最簡單的必須是它 
iset.forEach(i -> System.out.println(i)); 
//不能用for了,因爲沒有隨機訪問的get函數啦! 
Iterator<Integer> iter = iset.iterator; 
while(iter.hasNext) { 
iter.next;
}
Map<String, String> map = new HashMap<String, String>; 
map.put("111", "one"); 
map.put("zz", "zzzzzzzz"); 
map.put("a", "apple"); 
//對於entrySet迭代 
Iterator iter = map.entrySet.iterator; 
while(iter.hasNext) { 
Entry entry = (Entry) iter.next; 
System.out.println(entry.getKey + ": " + entry.getValue); 
//對key的set迭代 
Iterator iter2 = map.keySet.iterator; 
while(iter2.hasNext) { 
String key = (String) iter2.next; 
System.out.println(key + ": " + map.get(key)); 
}
 
轉載 
   
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章