Java遍历、删除Map

      面试的时候,遇到一个很尴尬的事情,就是面试官问怎么样遍历map,以前是做过,但是太久没使用了忘记了,自己查阅了一下书籍,我看的是《Java编程思想》第四版的,因为来深圳没有安顿好,不是经常上网,今天有空来发到博客上,随时谨记与心

先说遍历map:

map是主键对应的,所以要想获取map的值,一般都是通过获取key的方式去get()的,所以第一种方法是,但是第一种方式是获取其值的所有的集合,返回的类型是Collection类型

第一种方式是通过keySet的方式,遍历key的set通过get方法获取

第三种方法是通过汇过去Enty.Map的方式获取,这种方式获取的信息很全

下面是我实现的代码:

package com.lzb.common;

import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/**
 * 
 * 功能描述:遍历Map
 *
 * @author  lizhenbin
 *
 * 

修改历史:(修改人,修改时间,修改原因/内容)

*/ public class QueryMap { /** * 构建单例模式 */ private static QueryMap instance = null; public QueryMap() {}; public static synchronized QueryMap getInstance() { if(instance == null) instance = new QueryMap(); return instance; } /** * * 功能描述:用collection存放map的所有值,然后遍历collection * * @author lizhenbin *

创建日期 :May 8, 2012 6:43:52 PM

* * @param map * @return * *

修改历史 :(修改人,修改时间,修改原因/内容)

*/ public static String queryByCollection(Map map) { StringBuilder sb = new StringBuilder(); if(map==null) { System.out.println("Usage: Out Map is Null."); return null; } Collection values = map.values(); for(Iterator itor = values.iterator(); itor.hasNext();) { Object value = (Object)itor.next(); sb.append(value + " "); } return sb.toString(); } /** * * 功能描述:通过map的keySet遍历map * * @author lizhenbin *

创建日期 :May 8, 2012 6:49:46 PM

* * @param map * @return * *

修改历史 :(修改人,修改时间,修改原因/内容)

*/ public static String queryMapBySet(Map map) { StringBuilder sb = new StringBuilder(); if(map==null) { System.out.println("Usage: Out Map is Null."); return null; } Set keySet = map.keySet(); for(Object key : keySet) { Object value = map.get(key); sb.append(key + "=" + value + ";"); } sb.deleteCharAt(sb.length()-1); return sb.toString(); } /** * * 功能描述:通过Map.Enty遍历map * * @author lizhenbin *

创建日期 :May 8, 2012 6:54:19 PM

* * @param map * @return * *

修改历史 :(修改人,修改时间,修改原因/内容)

*/ public static String queryMapByMapEnty(Map map) { StringBuilder sb = new StringBuilder(); if(map==null) { System.out.println("Usage: Out Map is Null."); return null; } Set> setMe = map.entrySet(); for(Map.Entry me : setMe) { Object key = me.getKey(); Object value = me.getValue(); sb.append(key + "=" + value + ";"); } sb.deleteCharAt(sb.length()-1); return sb.toString(); } }

 

下面就说删除map的值,该情况是我去面试的时候去机试,公司要删除map的值,我当时创建一个map对象的是很,查看方法有remove这个方法,在全面遍历的时候找到对应的key,直接调用该方法,但是老是报异常,当时那个急啊,但是没办法,时间有限,想了一个变通的办法,就是遍历的时候备份一下,重新建立一个map,回来之后,我自己查了一下api文档,貌似说的是访问的冲突吧,好吧,那我就先把key放到一个list中,然后遍历list去删除,欢迎有更加好的办法交流。

这里我把我的两种的实现方法都贴出来。

package com.lzb.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 
 * 功能描述:删除map对应的值信息
 *
 * @author  lizhenbin
 *
 * 

修改历史:(修改人,修改时间,修改原因/内容)

*/ public class RemoveMapValue { /** * 构建单例模式 */ private static RemoveMapValue instance = null; public RemoveMapValue() {}; public static synchronized RemoveMapValue getInstance() { if(instance == null) instance = new RemoveMapValue(); return instance; } /** * * 功能描述:采用一个临时map收集适合的信息,将要过滤掉的排除 * * @author lizhenbin *

创建日期 :May 5, 2012 6:23:57 PM

* * @param map 目标map * @param obj 要删除的对象 * @return * *

修改历史 :(修改人,修改时间,修改原因/内容)

*/ public static Map rmMapValueByReplace (Map map, Object obj) { if(map!=null) { Map tempMap = new HashMap(); Set setkeys = map.keySet(); for(Iterator itor=setkeys.iterator(); itor.hasNext();) { Object key = itor.next(); Object value = map.get(key); if(value.equals(obj)) { tempMap.put(key, value); } } return tempMap; } else { System.out.println("Usage: Input Map is Null."); return null; } } /** * * 功能描述:通过key-value关系删除map信息 * * @author lizhenbin *

创建日期 :May 5, 2012 6:26:26 PM

* * @param map 源目标map * @param obj 要删除的对象 * @return * *

修改历史 :(修改人,修改时间,修改原因/内容)

*/ public static Map rmMapValueByKey(Map map, Object obj) { List keyStrs = new ArrayList(); if(map!=null) { Set setkeys = map.keySet(); for(Iterator itor = setkeys.iterator(); itor.hasNext();) { Object key = itor.next(); Object value = map.get(key); if(value.equals(obj)) { /** * 不能再这一步,直接通过key来删除map的信息 * 注意: 在这里map.remove(key); 会报并发访问异常,所以将过滤的map的key全部放在list里面 * 通过遍历list再去删除对应的map的信息 */ keyStrs.add(key); } } // 删除map的信息 for(Object s : keyStrs) { map.remove(s); } return map; } else { System.out.println("Usage: Input Map is Null."); return null; } } }

 

你可能感兴趣的:(J2se)