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

重写HashMap的更多相关文章

  1. Java中的HashMap

    今天到中关村软件园面试被问到Java中HashMap的存值原理,瞬间无言已对,回答用了一个数组,然后沉默,面试官说,一次的面试失败不算什么,之后...... 1.关于hashCode hashCode ...

  2. Java 总结 数据底层原理 【包括 ArrayList、LinkedList、hash table、HashMap、Hashtable、ConcurrentHashMap、hash code、HashSet、LinkedHashMap、LinkedHashSet】

    1.ArrayList (1)底层是由动态数组实现的[使用了List接口]. (2)动态数组是长度不固定,随着数据的增多而变长. (3)如果不指定,默认长度为10,当添加的元素超过当前数组的长度时,会 ...

  3. hashmap 实现 相同的key值时,value值叠加效果。

    一,了解一些基础 package com.ohs.demo; /** * * 一.需求是:停止相同的key值,覆盖效果,将重复的value值,叠加起来. * * 二.hash? 什么是hash? * ...

  4. LinkedHashMap源码详解

    序言 本来是不打算先讲map的,但是随着对set集合的认识,发现如果不先搞懂各种map,是无法理解set的.因为set集合很多的底层就是用map来存储的.比如HashSet就是用HashMap,Lin ...

  5. LinkedHashMap介绍

    转载:http://uule.iteye.com/blog/1522291 jdk1.7API文档链接:http://tool.oschina.net/apidocs/apidoc?api=jdk_7 ...

  6. 【java基础之jdk源码】集合类

    最近在整理JAVA 基础知识,从jdk源码入手,今天就jdk中 java.util包下集合类进行理解 先看图 从类图结构可以了解 java.util包下的2个大类: 1.Collecton:可以理解为 ...

  7. LinkedHashMap就这么简单【源码剖析】

    前言 声明,本文用得是jdk1.8 前面已经讲了Collection的总览和剖析List集合以及散列表.Map集合.红黑树还有HashMap基础了: Collection总览 List集合就这么简单[ ...

  8. 用js来实现那些数据结构12(散列表)

    上一篇写了如何实现简单的Map结构,因为东西太少了不让上首页.好吧... 这一篇文章说一下散列表hashMap的实现.那么为什么要使用hashMap?hashMap又有什么优势呢?hashMap是如何 ...

  9. Java集合详解5:深入理解LinkedHashMap和LRU缓存

    今天我们来深入探索一下LinkedHashMap的底层原理,并且使用linkedhashmap来实现LRU缓存. 摘要: HashMap和双向链表合二为一即是LinkedHashMap.所谓Linke ...

随机推荐

  1. [AHOI2013]找硬币(搜索)

    [Ahoi2013]找硬币 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 348  Solved: 114[Submit][Status] Descri ...

  2. 50个提高PHP编程效率的方法

      用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册 ...

  3. jQuery Mobile学习日记(二)

    首先依HTML5方式加载,DOCTYPE表示格式为HTML5:主要适用于iPhone.Android等,viewport表示适用于移动终端的适中显示,initial-scale缩放比例在1.0~1.3 ...

  4. MVC学习Day02之校验

    MVC校验有两种方法: 方法一:自己动手写js---------略 方法二: l在View的页面中,首先指定页面强类型@model 类型 l使用Html.***For(model=>model. ...

  5. [Asp.net mvc] 在Asp.net mvc 中使用MiniProfiler

    MiniProfiler是Stack Overflow团队设计的一款性能分析的小程序.可以对一个页面本身,及该页面通过直接引用.Ajax.Iframe形式访问的其它页面进行监控,监控内容包括数据库内容 ...

  6. Spring的辅助类

    http://www.cnblogs.com/maoan/p/3446224.html spring获取ApplicationContext对象的方法——ApplicationContextAware

  7. 【bzoj1486】 HNOI2009—最小圈

    http://www.lydsy.com/JudgeOnline/problem.php?id=1486 (题目链接) 题意 给出一张有向图,规定一个数值u表示图中一个环的权值/环中节点个数.求最小的 ...

  8. C++ STL初学笔记

    C++  STL初学笔记 更系统的版本见徐本柱的PPT set 在这儿:http://www.cnblogs.com/pdev/p/4035020.html #include <vector&g ...

  9. 洛谷 P1238 走迷宫

    因为小处疏漏,多花了半小时的水题 题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束 ...

  10. 以一个权限系统来告别WebForm —开篇

     前言: 当今是互联网的时代,我们己经阻止不了它的发展了,只有跟上脚步,才不会被抛弃,松散了这么久,该紧紧了.  背景: 我之所以说以一个权限应用系统来告别我的WebForm内部系统的生涯,是缘于我自 ...