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. SpringMVC使用中遇到的问题总结

    使用的IDE工具是MyEclipse2014, spring版本为3.1.1 在使用Spring MVC时需要修改web.xml配置文件,web.xml默认放在WEB-INF目录下. 1.web.xm ...

  2. C# JArray与JObject 的使用 json [{}]

    C# JArray与JObject 的使用 STEP1.using Newtonsoft.Json.Linq; STEP2 如何获取json里的某个属性(节点)值,对其删改,新增 //2.1 数组用J ...

  3. RESTful WebService入门(转)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://lavasoft.blog.51cto.com/62575/229206 REST ...

  4. Mac上git的安装配置与使用简述

    Mac下git搭建及使用 之前就只是经常在GitHubs上下载代码,也没注意怎么上传项目.一开始对git都没什么了解花了几个小时去小补了下知识.如果有需要可以转去这里学习:[GIT使用简易指南] (h ...

  5. java中的字符串简介,字符串的优化以及如何高效率的使用字符串

    简介 String最为java中最重要的数据类型.字符串是软件开发中最重要的对象之一,通常,字符串对象在内存中总是占据着最大的空间块.所以,高效处理字符串,将提高系统的整个性能. 在java语言中,S ...

  6. codevs 1082 线段树练习3 模板题

    #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ],sum[ ...

  7. Spring对Hibernate的session生效期(事物提交管理)介绍

    在Hibernate中我们每次进行一个操作的的时候我们都是要先开启事务,然后进行数据操作,然后提交事务,关闭事务,这样做的原因是因为Hibernate默认的事务自动提交是false,它是需要人为的手动 ...

  8. Json转换为对象

    JObject paramsList = JObject.Parse(OOOO); var obj = paramsList["AAAA"];

  9. BZOJ4195 程序自动分析

    Description 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3,…代表程序中出现的变量,给定n个形如xi=xj或x ...

  10. 代码注册广播接收者&利用广播调用服务的方法服务声命周期(混合开启)

    1)说明文档: 2)效果演示: 3)代码演示: