重写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,作参考。

posted @ 2013-06-21 11:01  小妖.OTZ  阅读(485)  评论(0编辑  收藏  举报