1.(P169-171)
Collection
|--List:元素是有序的,元素可以重複。因爲該集合體繫有索引。
|--ArrayList:底層的數據結構使用的是數組結構。特點:查詢速度很快。但是增刪稍慢。線程不同步。
|--LinkedList:底層使用的鏈表數據結構。特點:增刪速度很快,查詢稍慢。線程不同步。
|--Vector:底層是數組數據結構。線程同步。被ArrayList替代了。因爲效率低。
|--Set:元素是無序,元素不可以重複。、
List:
特有方法。凡是可以操作角標的方法都是該體系特有的方法。
增
add(index,element);
addAll(index,Collection);
刪
remove(index);
改
set(index,element);
查
get(index):
subList(from,to);
listIterator();
int indexOf(obj):獲取指定元素的位置。
ListIterator listIterator();
List集合特有的迭代器。ListIterator是Iterator的子接口。
在迭代時,不可以通過集合對象的方法操作集合中的元素。
因爲會發生ConcurrentModificationException異常。
所以,在迭代器時,只能用迭代器的放過操作元素,可是Iterator方法是有限的,
只能對元素進行判斷,取出,刪除的操作,
如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。
該接口只能通過List集合的listIterator方法獲取。
2.(P173)LinkedList:特有方法:
addFirst();
addLast();
getFirst();
getLast();
獲取元素,但不刪除元素。如果集合中沒有元素,會出現NoSuchElementException
removeFirst();
removeLast();
獲取元素,但是元素被刪除。如果集合中沒有元素,會出現NoSuchElementException
在JDK1.6出現了替代方法。
offerFirst();
offerLast();
peekFirst();
peekLast();
獲取元素,但不刪除元素。如果集合中沒有元素,會返回null。
pollFirst();
pollLast();
獲取元素,但是元素被刪除。如果集合中沒有元素,會返回null。
3.(P174必須會!)結合LinkedList模擬堆棧或者隊列數據結構
(P175必須會!)去除ArrayList中的重複元素
(P176必須會!)將自定義對象作爲元素存到ArrayList集合中國,並去除重複元素,比如人,同姓名同年齡被視爲同一個人,不進行重複存儲。
知識點:List中判斷存入的兩個對象是否相等的方法是equals(); contain()和remove()方法底層依靠的都是equals();
4. (P178) ArrayList判斷兩個對象是否相等的方法是equals(); HashSet中判斷兩個元素是否相等的方法是hashcode()和equals(),如果hashcode()相等再比較equals();
5.
|--Set:元素是無序(存入和取出的順序不一定一致),元素不可以重複。、
|--HashSet:底層數據結構是哈希表。是線程不安全的。不同步。
HashSet是如何保證元素唯一性的呢?
是通過元素的兩個方法,hashCode和equals來完成。
如果元素的HashCode值相同,纔會判斷equals是否爲true。
如果元素的hashcode值不同,不會調用equals。
注意,對於判斷元素是否存在,以及刪除等操作,依賴的方法是元素的hashcode和equals方法。
|--TreeSet:可以對Set集合中的元素進行排序。
底層數據結構是二叉樹。
保證元素唯一性的依據:
compareTo方法return 0.
TreeSet排序的第一種方式:讓元素自身具備比較性。
元素需要實現Comparable接口,覆蓋compareTo方法。
也種方式也成爲元素的自然順序,或者叫做默認順序。
TreeSet的第二種排序方式。
當元素自身不具備比較性時,或者具備的比較性不是所需要的。
這時就需要讓集合自身具備比較性。
在集合初始化時,就有了比較方式。
當兩種排序都存在時,以比較器爲主。
定義一個類,實現Comparator接口,覆蓋compare方法。
6
泛型:JDK1.5版本以後出現新特性。用於解決安全問題,是一個類型安全機制。
好處
1.將運行時期出現問題ClassCastException,轉移到了編譯時期。,
方便於程序員解決問題。讓運行時問題減少,安全。,
2,避免了強制轉換麻煩。
泛型格式:通過<>來定義要操作的引用數據類型。
在使用java提供的對象時,什麼時候寫泛型呢?
通常在集合框架中很常見,
只要見到<>就要定義泛型。
其實<> 就是用來接收類型的。
當使用集合時,將集合中要存儲的數據類型作爲參數傳遞到<>中即可。
7.//(P15-08)泛型類。
/*
什麼時候定義泛型類?
當類中要操作的引用數據類型不確定的時候,
早期定義Object來完成擴展。
現在定義泛型來完成擴展。
8. 泛型可以定義在方法上和類上。 1圖是將泛型定義在類上,2圖是講泛型定義在方法上(也可以理解爲在類上沒有聲明泛型型,所以要在方法上聲明該泛型)
泛型的好處示例: 以前必須使用兩個方法,現在使用泛型一個就夠了。你傳入的T是什麼就是什麼類型
9.Map集合:
Map集合:該集合存儲鍵值對。一對一對往裏存。而且要保證鍵的唯一性。
1,添加。
put(K key, V value)
putAll(Map<? extends K,? extends V> m)
2,刪除。
clear()
remove(Object key)
3,判斷。
containsValue(Object value)
containsKey(Object key)
isEmpty()
4,獲取。
get(Object key)
size()
values()
entrySet()
keySet()
Map
|--Hashtable:底層是哈希表數據結構,不可以存入null鍵null值。該集合是線程同步的。jdk1.0.效率低。
|--HashMap:底層是哈希表數據結構,允許使用 null 值和 null 鍵,該集合是不同步的。將hashtable替代,jdk1.2.效率高。
|--TreeMap:底層是二叉樹數據結構。線程不同步。可以用於給map集合中的鍵進行排序。
和Set很像。
其實大家,Set底層就是使用了Map集合。