1. 程式人生 > >11.3 對映

11.3 對映

考慮如何建立一個電話簿程式, 使得使用者輸入一個人的名字後,程式可以自動找出該人的電話號碼, 你可以將所需的資料存放在陣列、列表或數學集合中.  但是該解決方案在實際中並不可行. 

 

抽象資料型別對映也是一種集合, 其中儲存的元素都是具有某種單向關聯關係的物件對.  這個我們討論的對映是鍵(key)物件與值(value)物件之間的對映關係. 一個鍵只能對映到一個具體的值, 但是卻允許多個不同的鍵對映到同一個值. Java的集合框架定義了一個名為Map的介面來代表這種ADT.

 

可以將對映理解為兩個相互關聯的集合:一個儲存鍵的數學集合(set)和一個由每一個鍵對應的值組成的集合(collection). 

 

11.3.1 基本的對映操作

 

在Java集合框架中有兩個實現了Map介面的類,他們分別是HashMap和TreeMap類. HashMap 是一種更為通用的對映;而TreeMap能夠以有序的方式存在可以比較大小的鍵物件.

 

建立一個Map物件時需要指定兩個通用型別引數, 兩個引數間用逗號隔開. 第一個引數指明鍵物件的型別,第二個引數指明值物件的型別. 

Map<String, Double>salaryMap = new HashMap<String, Double>();

可以使用Map介面提供的put方法向對映中新增新的鍵/值對,put方法與其他集合型別提供的add方法基本相同. put方法通過兩個引數來分別接收鍵和值物件, 然後將他們連同對映關係一起儲存在Map物件中. 如果新新增的鍵物件已經與某些值物件建立了對映關係,那麼Map會將該鍵物件對映到新的值物件上. 

salaryMap.put("Stuart Reges", 10000.00);

一旦逆向Map物件添加了一些鍵/值對,就可以使用get方法來查詢其中包含的值物件. 呼叫get方法時,使用者需要提供一個鍵物件作為輸入引數,get方法會將鍵物件對映的值物件作為結果返回:

double jenSalary = salaryMap.get("Jenny");

需要檢查一個給定的鍵物件在map中是否已經建立對映時, 可以使用containsKey方法, 或者呼叫get方法然後檢查返回值是否為null. 

 

Map提供的toString方法會列印以逗號分隔的鍵/值對列表.