java里的map介面和python里的map函數完全不同。雖然都具有映射關係,但是java的map介面更貼近字典和集合這兩個引用數據類型。這個介面是一個雙列集合它的元素是由鍵和值組成的,也就是keys和values。這個介面有兩個實現類:hashmap和treemap。hashmap內部維護一個hash順序,所以和我們宏觀里看到的順序不太一樣。下例是把這個集合里的所有的值遍歷出來。

public class Example18 {
public static void main(String[] args) {
//直接獲取map里的值
//map存儲的值是collection集合
Map map = new HashMap();
map.put("1","javaScript");
map.put("2","Linux");
map.put("3","Unix");
Collection values = map.values();//把map對象里的值取出,轉換成collection集合類
Iterator it = values.iterator();
while (it.hasNext()){
Object value = it.next();
System.out.println(value);
}
}
}這裡是通過一個java的迭代器把map里的所有元素迭代出來。這裡的get方法是根據輸入的鍵返回對應的值。這裡是不允許出現重複的元素,如果輸入了相同的鍵值對,則視為對該鍵對應的值修改。也就是如下例:
map.put("3","MacOS");也就是把鍵為3的值修改了。簡而言之就是鍵相同,值修改。
很多初學者不適應hashmap里的讀取順序不是按照存入順序讀出來的,所以總想按照宏觀的順序讀取出來,我們可以使用LinkedHashMap類實現這一目的。它是用雙向鏈表來維護內部元素的關係,與LinkedList一樣。如下例:
public class Example19 {
public static void main(String[] args) {
//要想使得map對象里的存入時的值與讀取出來的值順序一致,則需要使用linkedhashmap類
//內部維護一個雙向鏈表
Map map = new LinkedHashMap();//使用linkedhashmap類就實現了存入與讀取順序一致
map.put("1","Ubuntu");
map.put("2","CentOS");
map.put("3","SunOS");
map.put("4","MacOS");
Set keySet = map.keySet();//取出map對象里的鍵組成的集合
Iterator it = keySet.iterator();//為什麼是keySet調用迭代器,因為是把鍵取出後存入keySet對象里的
while (it.hasNext()){
Object key = it.next();
Object value = map.get(key);
System.out.println(key+":"+value);
}
}
}這樣就是實現了讀取與存放順序一致了。

Treemap集合也是存儲鍵值對映射關係,不允許出現重複的鍵,內部是通過二叉樹原理實現的,所以就可以實現鍵不重複。它是由一個根組成的,往下劃分兩個子樹,由左子樹和右子樹組成,左子樹總是小於右子樹。
public static void main(String[] args) {
//TreeMap集合
//是通過二叉樹原理保證鍵的唯一性。TreeMap是按照某種順序排列的
TreeMap tmap = new TreeMap();
tmap.put("1","java");
tmap.put("2","Linux");
tmap.put("3","MacOS");
tmap.put("4","Ubuntu");
Set keyset = tmap.keySet();
Iterator ior = keyset.iterator();
while (ior.hasNext()){
Object key = ior.next();
Object value = tmap.get(key);
System.out.println(key+":"+value);
}
}它讀取的元素的順序和存儲的順序一致。因為編號是String類型,String類型實現了Comparable介面,因此默認會按照自然順序進行排序。
當使用TreeMap集合時,也可以自定義比較法。下面的例子就實現了自定義比較器。
public class Example21 {
public static void main(String[] args) {
/*
* 實現自定義比較器,與二叉樹集合默認排序規則相反的排序
* */
TreeMap tm = new TreeMap(new MyComparator());
tm.put("1","JavaScript");
tm.put("2","java虛擬機");
tm.put("3","Linux Kernel");
Set keySet = tm.keySet();
Iterator it = keySet.iterator();
while (it.hasNext()){
Object key = it.next();
Object value = tm.get(key);//獲得鍵對應的值
System.out.println(key+":"+value);
}
}
}
//實現自定義比較器
class MyComparator implements Comparator {
public int compare(Object obj1,Object obj2){
String id1 = (String) obj1; //把obj1強制轉換為String類型
String id2 = (String) obj2;
return id2.compareTo(id1);//把比較結果返回
}
}jdk幫我們預留了一個介面叫Comparator,我們使用implements實現這個介面。因為在java里所有的類的父類都是Object是默認繼承的。所以在集合中的數據類型都轉成Object類型。那麼我們要做的就是把Object類型轉譯成String類型。然後使用compareTo方法進行比較,這樣就實現了字典逆序。
Properties集合是map介面的一個實現類Hashtable與hashMap相似,hashtable的線程是安全的,存取元素時速度慢。Properties主要存儲字元串類型的鍵和值。
public static void main(String[] args) {
//Properties集合是map介面的一個實現類Hashtable與hashMap相似。
//hashtable的線程是安全的,存取元素時速度慢。
//Properties主要存儲字元串類型的鍵和值
//按順序存儲的順序讀取結果
Properties p = new Properties();
p.setProperty("1","C");//寫入Properties集合
p.setProperty("2","JavaScript");
p.setProperty("3","Node.js");
/*
* 通過調用propertyNames方法獲得一個包含所有鍵的Enumeration對象,
* 在遍歷時調用getProperty方法獲取值
*
* */
Enumeration names = p.propertyNames();//獲取Enumeration對象所有鍵的枚舉
while (names.hasMoreElements()){
String key = (String) names.nextElement();
String value = (String) p.getProperty(key);//獲取鍵對應的值
System.out.println(key+":"+value);
}
}主要用於編寫配置項的,這個我在學Spring Boot這麼課的時候經常使用。它有getproperty()和setproperty()這兩個方法,用於讀寫配置。再詳細的就在代碼里寫的很完備了,直接看代碼就可以了。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/269148.html
微信掃一掃
支付寶掃一掃