標籤:
------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實作類別