Java集合框架(3)
?Map(和Collection<E>一樣都是集合框架的頂層接口)
|--Hashtable:底層是哈希表數(shù)據(jù)結(jié)構(gòu),不可以用null對(duì)象作為鍵或值。它是線程同步的。
|--HashMap:底層是哈希表。允許使用null鍵null值,該集合是不同步的,效率高,將Hashtable替代。
|--TreeMap:底層是二叉樹數(shù)據(jù)結(jié)構(gòu)。線程不同步,可以用于給Map集合中的鍵進(jìn)行排序。
Map和Set很像,其實(shí),Set底層使用了Map集合。
Map<K, V>:K-此映射所維護(hù)的鍵的類型,V-映射值的類型。
Map集合的特點(diǎn):該集合存儲(chǔ)鍵值對(duì)。一對(duì)一對(duì)往集合里面存,而且要保證鍵的唯一性。
以下是Map集合中的共性方法:
1.添加:V put(K key, V value)用相同的鍵添加值,會(huì)覆蓋原來(lái)的值,每次添加返回原來(lái)鍵所對(duì)應(yīng)的值; void putAll(Map<? extends K, ? extends V> m);
2.刪除:void clear(); V remove(Object key);
3.判斷:boolean containsKey(Object key); boolean containsValue(Object value);boolean isEmpty();
4.獲取:V get(Object key)可以通過get方法的返回值來(lái)判斷一個(gè)鍵值對(duì)是否存在; int size(); Collection<V> values();
兩個(gè)重要的方法(Map集合的兩種取出方式):
Set<Map.Entry<K, V>> entrySet():返回此映射中包含的映射關(guān)系的Set視圖。而這個(gè)映射關(guān)系的數(shù)據(jù)類型就是Map.Entry。獲得關(guān)系對(duì)象Map.Entry后,就可以通過Map.Entry中g(shù)etKey和getValue方法獲得鍵和值。
Set<K> keySet():返回此映射中包含的鍵的Set視圖。因?yàn)镾et具備迭代器,所有可以用迭代方式取出所有的鍵,再根據(jù)get方法,獲取每一個(gè)鍵對(duì)應(yīng)的值。
?
Java代碼如果某個(gè)類需要?jiǎng)?chuàng)建多個(gè)對(duì)象,最好實(shí)現(xiàn)Comparable<E>接口(具備自然順序),覆寫hashCode()和equals()方法 。
?
Java代碼Map擴(kuò)展知識(shí)
Map集合被使用是因?yàn)榫邆溆成潢P(guān)系
Map<K, Map<K1, V1>>
Map<K, Collection<T>>
上面是一個(gè)一對(duì)多映射關(guān)系,第二種形式在開發(fā)中比較常見。
?
-----------------------分----------割-------------線---------------
集合框架中的工具類:
(1)Collections:集合工具類
1. public static <T extends Comparable<? super T>> void sort(List<T> list);//默認(rèn)排序
2. public static <T> void sort(List<T>, Comparator<? super T> c);// 自定義排序,利用比較器
3. public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
4. binarySearch();
5. static <T> void fill(List<? super T> list, T obj); // 用obj替代集合中的元素
6. reverseOrder(),返回一個(gè)相反的比較器,直接查文檔,這個(gè)類中有很多有用的靜態(tài)方法。
7.<T> T[] toArray(T[] a);//集合變數(shù)組,
1. 傳入的形參數(shù)組到底應(yīng)該定義多長(zhǎng)呢?當(dāng)傳入的形參數(shù)組長(zhǎng)度小于集合的size,那么該方法內(nèi)部會(huì)創(chuàng)建一個(gè)新的數(shù)組。它的長(zhǎng)度剛剛好是集合的size。 當(dāng)傳入的形參數(shù)組長(zhǎng)度大于集合的size,那么就不會(huì)創(chuàng)建新的數(shù)組。就使用傳進(jìn)來(lái)的數(shù)組。
2. 為什么要將集合變成數(shù)組?為了限定對(duì)元素的操作。不需要進(jìn)行增刪了。
(2)Arrays:數(shù)組工具類
1. asList():將數(shù)組變成List集合,這樣可以使用集合的思想和方法來(lái)操作數(shù)組中的元素。注意:將數(shù)組變成集合,不可以使用集合的增刪方法,因?yàn)閿?shù)組的長(zhǎng)度是固定的。如果數(shù)組中的元素都是對(duì)象,那么變成集合時(shí),數(shù)組中的元素就直接轉(zhuǎn)成集合中的元素。如果數(shù)組中的元素都是基本類型,那么會(huì)將該數(shù)組作為集合中的元素存在。
2. 其他方法可以看文檔
增強(qiáng)for循環(huán)(JDK 1.5):為了簡(jiǎn)化書寫,但是會(huì)有局限性,即只能獲取元素,但是不能對(duì)集合進(jìn)行操作。但是迭代器除了遍歷,還可以進(jìn)行remove集合中的元素。如果是用ListIterator,還可以在遍歷過程中進(jìn)行增刪改操作。要使用foreach語(yǔ)句,需要實(shí)現(xiàn)Iterable<T>接口
可變參數(shù):JDK 1.5 版本出現(xiàn)的新特性,其實(shí)是數(shù)組參數(shù)的簡(jiǎn)寫形式,不用每一次都手動(dòng)的建立數(shù)組對(duì)象,只要將要操作的元素作為參數(shù)傳遞即可,隱式將這些參數(shù)封裝成了數(shù)組。在使用時(shí)注意:可變參數(shù)一定要定義在參數(shù)列表的最后面。
靜態(tài)導(dǎo)入:import static 導(dǎo)入的是某一類中的所有靜態(tài)成員。
?
轉(zhuǎn)載于:https://blog.51cto.com/ajiao13/1140887
總結(jié)
以上是生活随笔為你收集整理的Java集合框架(3)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NSHashTable and NSMa
- 下一篇: java美元兑换,(Java实现) 美元