Map.Entry 類使用簡介

你是否已經對每次從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裏面的值。

map內部是按照hash算法存儲的,但如果能對map排序在某些時候還是有用的

/**
     * @param h
     * @return
     * 實現對map按照value升序排序
     */
    @SuppressWarnings("unchecked")
    public static Map.Entry[] getSortedHashtableByValue(Map h) {
        Set set = h.entrySet();
        Map.Entry[] entries = (Map.Entry[]) set.toArray(new Map.Entry[set
                .size()]);
        Arrays.sort(entries, new Comparator() {
            public int compare(Object arg0, Object arg1) {
                Long key1 = Long.valueOf(((Map.Entry) arg0).getValue().toString());
                Long key2 = Long.valueOf(((Map.Entry) arg1).getValue().toString());
                return key1.compareTo(key2);
            }
        });

        return entries;
    }

 

 

/**
     * @param h
     * @return
     * 實現對map按照key排序
     */
    @SuppressWarnings("unchecked")
    public static Map.Entry[] getSortedHashtableByKey(Map h) {

        Set set = h.entrySet();

        Map.Entry[] entries = (Map.Entry[]) set.toArray(new Map.Entry[set
                .size()]);

        Arrays.sort(entries, new Comparator() {
            public int compare(Object arg0, Object arg1) {
                Object key1 = ((Map.Entry) arg0).getKey();
                Object key2 = ((Map.Entry) arg1).getKey();
                return ((Comparable) key1).compareTo(key2);
            }

        });

        return entries;
    }

轉自:http://holdbelief.javaeye.com/blog/514818

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章