日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java集合框架(3)

發(fā)布時(shí)間:2023/12/10 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java集合框架(3) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?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代碼
  • interface Map<K, V> {
  • public static interface Entry<K ,V> {
  • // 只有接口處于處于成員變量的位置,才可以用static修飾
  • }
  • }
  • ?
  • class HashMap implements Map<K, V> {
  • class HashEntry implements Map.Entry<K, V> {
  • ?
  • }
  • }
  • interface Map<K, V> {public static interface Entry<K ,V> {// 只有接口處于處于成員變量的位置,才可以用static修飾}}class HashMap implements Map<K, V> {class HashEntry implements Map.Entry<K, V> {} }

    如果某個(gè)類需要?jiǎng)?chuàng)建多個(gè)對(duì)象,最好實(shí)現(xiàn)Comparable<E>接口(具備自然順序),覆寫hashCode()和equals()方法 。

    ?

    Java代碼
  • /* 練習(xí):獲取某個(gè)字符串中的字母出現(xiàn)的次數(shù)
  • 什么時(shí)候使用Map集合?當(dāng)數(shù)據(jù)之間存在著映
  • 射關(guān)系時(shí),就要先想到Map集合 */
  • ?
  • import java.util.Map;
  • import java.util.Set;
  • import java.util.TreeMap;
  • ?
  • public class TreeMapDemo {
  • ?
  • ?
  • public static void main(String[] args) {
  • charCount("dgadfhfsdghrsahfswrteurirwxvnxmxmxmbxhahaf");
  • }
  • ?
  • public static void charCount(String str) {
  • char[] chs = str.toCharArray();
  • ?
  • TreeMap<Character, Integer> treeMap = new TreeMap<Character, Integer>();
  • Integer temp;
  • int count = 0;
  • for (int i=0; i<chs.length; i++) {
  • ?
  • if((temp = treeMap.get(chs[i])) != null) {
  • count = temp;
  • }
  • count++;
  • treeMap.put(chs[i], count);
  • count = 0;
  • }
  • //(1)從Map集合中的第一種取出方式:entrySet()
  • System.out.println("--------------first---------------------");
  • Set<Map.Entry<Character, Integer>> treemapEntry = treeMap.entrySet();
  • ?
  • for (Map.Entry<Character, Integer> me : treemapEntry){
  • Character character = me.getKey();
  • Integer integer = me.getValue();
  • System.out.print(character + "(" + integer + ")");
  • }
  • System.out.println("\n" + "--------------second---------------------");
  • //(1)從Map集合中的第一種取出方式: keySet()
  • Set<Character> ketSet = treeMap.keySet();
  • ?
  • for (Character character : ketSet) {
  • Integer integer = treeMap.get(character);
  • System.out.print(character + "(" + integer + ")");
  • }
  • }
  • }
  • /* 練習(xí):獲取某個(gè)字符串中的字母出現(xiàn)的次數(shù) 什么時(shí)候使用Map集合?當(dāng)數(shù)據(jù)之間存在著映射關(guān)系時(shí),就要先想到Map集合 */import java.util.Map; import java.util.Set; import java.util.TreeMap;public class TreeMapDemo {public static void main(String[] args) {charCount("dgadfhfsdghrsahfswrteurirwxvnxmxmxmbxhahaf");}public static void charCount(String str) {char[] chs = str.toCharArray();TreeMap<Character, Integer> treeMap = new TreeMap<Character, Integer>();Integer temp;int count = 0;for (int i=0; i<chs.length; i++) { if((temp = treeMap.get(chs[i])) != null) {count = temp;}count++;treeMap.put(chs[i], count);count = 0; }//(1)從Map集合中的第一種取出方式:entrySet()System.out.println("--------------first---------------------");Set<Map.Entry<Character, Integer>> treemapEntry = treeMap.entrySet();for (Map.Entry<Character, Integer> me : treemapEntry){Character character = me.getKey();Integer integer = me.getValue();System.out.print(character + "(" + integer + ")");}System.out.println("\n" + "--------------second---------------------");//(1)從Map集合中的第一種取出方式: keySet()Set<Character> ketSet = treeMap.keySet();for (Character character : ketSet) {Integer integer = treeMap.get(character);System.out.print(character + "(" + integer + ")");}} }

    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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。