java Map及Map.Entry詳解

u010660276發表於2014-01-05
 Map是java中的介面,Map.Entry是Map的一個內部介面。

         Map提供了一些常用方法,如keySet()、entrySet()等方法,keySet()方法返回值是Map中key值的集合;entrySet()的返回值也是返回一個Set集合,此集合的型別為Map.Entry。

         Map.Entry是Map宣告的一個內部介面,此介面為泛型,定義為Entry<K,V>。它表示Map中的一個實體(一個key-value對)。介面中有getKey(),getValue方法。

         

  由以上可以得出,遍歷Map的常用方法:

      

1.  Map map = new HashMap();

           Irerator iterator = map.entrySet().iterator();

           while(iterator.hasNext()) {

                   Map.Entry entry = iterator.next();

                   Object key = entry.getKey();

                   //

           }

       2.Map map = new HashMap(); 

           Set  keySet= map.keySet();

           Irerator iterator = keySet.iterator;

           while(iterator.hasNext()) {

                   Object key = iterator.next();

                   Object value = map.get(key);

                   //

           }

       另外,還有一種遍歷方法是,單純的遍歷value值,Map有一個values方法,返回的是value的Collection集合。通過遍歷collection也可以遍歷value,如

      Map map = new HashMap();

      Collection c = map.values();

      Iterator iterator = c.iterator();

      while(iterator.hasNext()) {

             Object value = iterator.next(); 

     }

你是否已經對每次從Map中取得關鍵字然後再取得相應的值感覺厭倦?使用Map.Entry類,你可以得到在同一時間得到所有的資訊。標準的Map訪問方法如下:

Set keys = map.keySet( );
if(keys != null) {
      Iterator iterator = keys.iterator( );
      while(iterator.hasNext( )) {
             Object key = iterator.next( );
             Object value = map.get(key);
                                                          ;....
        ;}
} 

 


然後,這個方法有一個問題。從Map中取得關鍵字之後,我們必須每次重複返回到Map中取得相對的值,這是很繁瑣和費時的。

 

幸運的是,這裡有一個更加簡單的途徑。Map類提供了一個稱為entrySet()的方法,這個方法返回一個Map.Entry例項化後的物件集。接著,Map.Entry類提供了一個getKey()方法和一個getValue()方法,因此,上面的程式碼可以被組織得更符合邏輯。舉例如下:

 

 

Set entries = map.entrySet( );
if(entries != null) {
          Iterator iterator = entries.iterator( );
          while(iterator.hasNext( )) {
                   Map.Entry entry =iterator.next( );
                   Object key = entry.getKey( );
                   Object value = entry.getValue();
                                                                  ;....
             }
} 

 


儘管增加了一行程式碼,我們卻省略了許多對Map不必要的“get”呼叫。同時,提供給開發人員一個同時保持了關鍵字和其對應的值的類。Map.Entry同時也提供了一個setValue()方法,程式設計師可以使用它修改map裡面的值。



相關文章