Java——(八)Map之LinkedHashMap、TreeMap、EnumMap實作類別

來源:互聯網
上載者:User

標籤:

------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! -------

1.LinkedHashMap實作類別

  LinkedHashMap需要維護意識的插入順序,因此效能略低於HashMap的效能;但因為它以

鏈表來維護內部順序,所以在迭代訪問Map裡的全部元素時將有較好的效能。下面示範了

LinkedHashMap的功能。

 1 import java.util.LinkedHashMap; 2  3 public class LinkedHashMapTest { 4  5     public static void main(String[] args) { 6  7         LinkedHashMap scores = new LinkedHashMap<>(); 8         scores.put("語文", 80); 9         scores.put("數學", 82);10         scores.put("英語", 76);11         for (Object key : scores.keySet()) {12             System.out.println(key + "--->" + scores.get(key));13         }14     }15 16 }

運行結果:

語文--->80數學--->82英語--->76

2.使用Properties讀寫屬性檔案

  Properties類是Hashtable類的子類,該對象在處理檔案屬性時特別方便。Properties類可以把

Map對象和屬性檔案關聯起來,從而可以把Map對象中的key—value對寫入屬性檔案中,也可以把屬

性檔案的中的“屬性名稱=屬性值”載入到Map對象中。由於屬性檔案裡的屬性名稱、屬性值只能是字串類

型,所以Properties裡的key、value都是字串類型。該類型提供了如下三個方法來修改Properties

裡的key、value值。

1)String getProperty(String key):擷取Properties中指定屬性名稱對應的屬性值,類似於Map的

get(Object key)方法。

2)getProperty(String key, String defaultValue):該方法與前一個方法基本相似。該方法多一

個功能,如果Properties中不存在指定的key時,則該方法指定預設值。

3)Object setProperaty(String key, String value): 設定屬性值,類似於Hashtable的put()方法。

此外,它還提供了兩個讀寫Field檔案的方法。

4)void load(InputStream inStream):從屬性檔案(以輸入資料流表示)中載入key—value對,把載入

到的key—value對追加到Properties裡。

5)void store(OutputStream out, String comments):將Properties中的key—value對輸出到指定

的屬性檔案(以輸出資料流表示)中。

  下面程式示範了Properties類的用法。

 1 import java.io.FileInputStream; 2 import java.io.FileNotFoundException; 3 import java.io.FileOutputStream; 4 import java.io.IOException; 5 import java.util.Properties; 6  7  8 public class PropertiesTest { 9 10     public static void main(String[] args) throws FileNotFoundException, IOException {11 12         Properties props = new Properties();13         //向Properties中添加屬性14         props.setProperty("uername", "暨雪");15         props.setProperty("password", "123456");16         //將Properties中的key—value對儲存到a.ini檔案中17         props.store(new FileOutputStream("a.ini"), "comment line");18         //建立一個Properties對象19         Properties props2 = new Properties();20         //向Properties中添加屬性21         props2.setProperty("age", "20");22         //將a.ini檔案中的key—value對追加到props2中23         props2.load(new FileInputStream("a.ini"));24         System.out.println(props2);25     }26 27 }

運行結果:

{age=20, password=123456, uername=暨雪}

  程式在當前路徑下產生一個a.ini檔案,該檔案的內容如下:

#comment line#Thu Jun 11 23:53:36 CST 2015password=123456uername=\u66A8\u96EA

3.TreeMap實作類別

  TreeMap就是一個紅/黑樹狀結構資料結構,每個key—value即作為紅/黑樹狀結構的一個節點。TreeMap儲存

key—value對時,需要根據key對節點進行排序。TreeMap可以保證所有的key—value對處於有序

狀態。TreeMap也有兩種排序方式。類似TreeSet中判斷元素相等的標準,TreeMap中判斷兩個key

相等的標準是:兩個key通過compareTo()方法返回0,TreeMap即認為這兩個key是相等的。重寫

該類的equals()方法和compareTo()方法時應保持一致的返回結果:兩個key通過equals()方法比較

返回true時,它們通過compareTo()方法比較應該返回0,否則TreeMap與Map介面的規則就會衝突。

  以下提供了TreeMap根據key順序來訪問key—value對的方法。

1)Map.Entry firstEntry():返回該Map中最小key所對應的key—value對,如果該Map為空白,則返回null。

2)Object firstKey():返回該Map中的最小key值,如果該Map為空白,則返回null。

3)Map.Entry lastEntry():返回該Map中最大key值,如果該Map為空白或不存在這樣的key—value,則都返回null。

4)Object lastKey():返回該Map中的最大key值,如果該Map為空白或不存在這樣的key,則都返回null。

5)Map.Entry higherEntry(Object key):返回該Map中位於key後一位的key值(即大於指定key的最小key值)。

如果該Map為空白,則都返回null。

6)Object higherKey(Object key):返回該Map中位於key後一位的key值(即大於指定key的最小key值)。

如果該Map為空白或不存在這樣的key,則都返回null。

7)Map.Entry lowerEntry(Object key):返回該Map中位於key前一位的key值(即小於指定key的最大key所對應

的key—value對)。如果該Map為空白或不存在這樣的key—value,則都返回null。

8)Object lowerEntry(Object key):返回該Map中位於key前一位的key值(即小於指定key的最大key值)。如果

該Map為空白或不存在這樣的key—value,則都返回null

9)NavigableMap subMap(Object fromKey, boolean fromInclusive, Object toKey, boolean toInclusive):

返回該Map的子Map,其key的範圍是從fromKey(是否包括取決於第二個參數)到toKey(是否包括取決於第四個參數)。

10)SrotedMap subMap(Object fromKey, Object toKey):返回該Map的子Map,其key的範圍是從fromKey(包括)

到toKey(不包括)。

11)SortedMap tailMap(Object fromKey):返回該Map的子Map,其key的範圍是大於fromKey(包括)的所有key。

12)NavigableMap tailMap(Object fromKey, boolean inclsive):返回該Map的子Map,其key範圍是大於fromKey

(是否包括取決於第二個參數)的所有key。

13)SortedMap headMap(Object toKey):返回該Map的子Map,其key範圍是小於fromKey(不包括)的所有key。

14)NavigableMap headMap(Object toKey, boolean inclusive):返回該Map的子Map,其key範圍是大於fromKey

(是否包括取決於第二個參數)的所有key。

  下面程式示範了TreeMap的基本用法。(自然排序)

 1 import java.util.TreeMap; 2  3 class Rc implements Comparable { 4     int count; 5  6     public Rc(int count) { 7         this.count = count; 8     } 9 10     @Override11     public String toString() {12 13         return "R[count:" + count + "]";14     }15 16     @Override17     public boolean equals(Object obj) {18         if (this == obj) {19             return true;20         }21         if (obj != null && obj.getClass() == Rc.class) {22             Rc r = (Rc) obj;23             return r.count == this.count;24         }25         return false;26     }27 28     @Override29     public int compareTo(Object o) {30 31         Rc r = (Rc) o;32         return count > r.count ? 1 : count < r.count - 1 ? -1 : 0;33     }34 }35 36 public class TreeMapTest {37 38     public static void main(String[] args) {39         40         TreeMap tMap = new TreeMap<>();41         tMap.put(new Rc(3), "黑馬程式員");42         tMap.put(new Rc(-5), "CSDN");43         tMap.put(new Rc(9), "傳智播客");44         System.out.println(tMap);45         //返回該TreeMap的第一個Entry對象46         System.out.println(tMap.firstEntry());47         //返回該TreeMap的最後一個key值48         System.out.println(tMap.lastKey());49         //返回該TreeMap的比new R(2)大的最小key值50         System.out.println(tMap.higherKey(new Rc(2)));51         //返回該TreeMap的比new R(2)小的最大的key—value對52         System.out.println(tMap.higherEntry(new Rc(2)));53         //返回該TreeMap的子TreeMap54         System.out.println(tMap.subMap(new Rc(-1), new Rc(5)));55     }56 57 }

 

運行結果:

{R[count:-5]=CSDN, R[count:3]=黑馬程式員, R[count:9]=傳智播客}R[count:-5]=CSDNR[count:9]R[count:9]R[count:9]=傳智播客{R[count:3]=黑馬程式員}

 4.EnumMap實作類別

  EnumMap是一個與枚舉一起使用的Map實現,EnumMap中的所有key都必須是單個枚舉類的枚舉值。

EnumMap在內部以數組形式儲存,所以這種實現形式非常緊湊、高效。EnumMap根據key的自然排序(

即枚舉值在枚舉類中定義順序)來維護key—value對的順序。

  下面程式示範了EnumMap的用法。

 1 import java.util.EnumMap; 2  3 enum Season { 4     SPRING, SUMMER, FALL, WINRER 5 } 6  7 public class EnumMapTest { 8  9     public static void main(String[] args) {10 11         /* 建立一個EnumMap對象,該EnumMap的所有key必須是Season枚舉類的枚舉值 */12         EnumMap enumMap = new EnumMap<>(Season.class);13         enumMap.put(Season.SUMMER, "夏日炎炎");14         enumMap.put(Season.SPRING, "春暖花開");15         System.out.println(enumMap);16     }17 18 }

運行結果:

{SPRING=春暖花開, SUMMER=夏日炎炎}

  上面程式建立該EnumMap對象是指定它的key只能是Season枚舉類的枚舉值。如果該

EnumMap中添加兩個key—value對後,這兩個key—value對將會以Season枚舉值的自然

順序排序。

 

Java——(八)Map之LinkedHashMap、TreeMap、EnumMap實作類別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.