关闭

百分点笔试题-写一个哈希表的遍历的算法

标签: Map.EntryHashMapHashtable
2770人阅读 评论(0) 收藏 举报
分类:

Map.Entry使用解读及其在哈希表的遍历中的应用

       在北京百分点科技笔试的时候,有一道算法设计题目:写一个算法,遍历哈希表,并输出相应的key,value值。当时答的不是很好,事后上网查了下资料,整理成下篇文章,供以后参考学习。

一、Map.Entry使用解读

1.Map.Entry说明

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方法。

2.Map.Entry使用

你是否已经对每次从Map中取得关键字然后再取得相应的值感觉厌倦?使用Map.Entry类,你可以得到在同一时间得到所有的信息。

标准的Map访问方法如下: 

Map map = new HashMap(); 
Set keys = map.keySet( );//keySet返回的是Map中key的集合
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()方法,因此,上面的代码可以被组织得更符合逻辑。举例如下:

Map map = new HashMap(); 
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 map = new HashMap(); 
Iterator iter = map.entrySet().iterator(); 
while (iter.hasNext()) { 
    Map.Entry entry = (Map.Entry) iter.next(); 
    Object key = entry.getKey(); 
    Object val = entry.getValue(); 
} 

   效率高,以后一定要使用此类型的遍历哈希表的方式!尽管增加了一行代码,我们却省略了许多对Map不必要的“get”调用。同时,提供给开发人员一个同时保持了关键字和其对应的值的类。Map.Entry同时也提供了一个setValue()方法,程序员可以使用它修改map里面的值。

二、Map.Entry在哈希表的遍历中的应用 

import java.util.Enumeration;  
import java.util.HashMap;  
import java.util.Hashtable;  
import java.util.Iterator;  
import java.util.Map;  
import java.util.Set;  
public class HashMapTable {  
    public static void main(String[] args) {  
        Map map = new HashMap();  
        Hashtable table = new Hashtable();  
  
        map.put("map_key_1", "value_1");  
        map.put( "map_key_2", null);  
  
          
        table.put("table_key_1", "table_value_1");  
        table.put("table_key_2", "table_value_2");  
        //table.put("table_key_3", null); /**table中允许有null( key和value中任一)*/  
  
        Set map_ety = map.entrySet();  
        //HashMap 和Hashtable 中元素在遍历的时候是后进先出,栈的结构  
        for(Iterator iter = map_ety.iterator(); iter.hasNext(); ){  
            Map.Entry ety = (Map.Entry)iter.next();  
            System.out.println(ety.getKey() + "====" + ety.getValue());  
        }  
        for( Enumeration e = table.keys(); e.hasMoreElements(); ){  
            String key = (String)e.nextElement();  
            System.out.println( key + "=====" + table.get(key));  
        }  
    }  
}  
运行结果:

map_key_2====null
 
map_key_1====value_1
 
table_key_2=====table_value_2
 
table_key_1=====table_value_1

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:455627次
    • 积分:4428
    • 等级:
    • 排名:第6730名
    • 原创:65篇
    • 转载:53篇
    • 译文:0篇
    • 评论:49条
    最新评论