zoukankan      html  css  js  c++  java
  • 重写HashMap

    package gov.gfmis.fap.util;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.dom4j.Attribute;
    import org.dom4j.Element;
    
    /**
     * xml对象模型
     *             /属性(值对模式保存)
     *             
     *       XMLData  -父子结构则递归保存XMLData      
     *                   /单个要素节点则存放属性XMLData     
     *             子节点
     *                   多个相同要素节点则存放List
     * 使用这种模式应避免让元素名和属性名相同
     * eg:
     *                                           
     *                                      /XMLData aa --XMLData bb
     *                             /List aa
     *          ------>XMLData data        XMLData aa
     *                            XMLData cc
     *   
     * 
     * @version 1.0
     * @author victor
     * @see XMLObjectVisitor#visit(Element)
     * @see XMLObjectVisitor#visit(Attribute)
     * @since java 1.4.1
     */
    public class XMLData extends HashMap 
    {
    	private static final long serialVersionUID = 100000000000000L;
    	/**
    	 * 重载Map的put方法,实现个性化需求
    	 * @param childName 对象名
    	 * @param child 对象
    	 * @return 原值对象,若不存在则为null
    	 */
    	public Object put(Object childName,Object child)
    	{
    		return this.addObject(this,(String)childName,child);
    	}
    	/**
    	 * 根据对象名,将对象保存在父对象中,覆盖原同名对象
    	 * @param parent 父Map对象
    	 * @param child 子Map对象
    	 * @param childName 子对象名称
    	 * @return 原值对象,若不存在则为null
    	 */
    	private Object addObject(XMLData parent,String childName,Object child)
    	{
    		Object oldObj = parent.get(childName);
    		if(parent.get(childName) == null)
    		{
    			super.put(childName,child);
    		}
    		else if(parent.get(childName) instanceof Map)
    		{
    			List list = new ArrayList();
    			list.add(parent.get(childName));
    			list.add(child);
    			super.put(childName,list);
    		}
    		else if(parent.get(childName) instanceof List)
    		{
    			List ls = (List)parent.get(childName);
    			ls.add(child);
    		}
    		else super.put(childName,child);
    		
    		return oldObj;
    	}
    }

    别人重写的HashMap,作参考。

  • 相关阅读:
    Cookie和Session的区别
    CSRF攻击与防御(写得非常好)
    AcWing397 逃不掉的路(边双)
    CF1345D Monopole Magnets(构造)
    AcWing1175 最大半连通子图(tarjan)
    西安邮电大学第五届ACM-ICPC校赛 C题 异或生成树(树形dp)
    AcWing368 银河(差分约束)
    AcWing401 从u到v还是从v到u? (tarjan)
    牛客 位数差(二分)
    AcWing367 学校网络(tarjan)
  • 原文地址:https://www.cnblogs.com/sunwufan/p/3147839.html
Copyright © 2011-2022 走看看