重写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,作参考。
重写HashMap的更多相关文章
- Java中的HashMap
今天到中关村软件园面试被问到Java中HashMap的存值原理,瞬间无言已对,回答用了一个数组,然后沉默,面试官说,一次的面试失败不算什么,之后...... 1.关于hashCode hashCode ...
- Java 总结 数据底层原理 【包括 ArrayList、LinkedList、hash table、HashMap、Hashtable、ConcurrentHashMap、hash code、HashSet、LinkedHashMap、LinkedHashSet】
1.ArrayList (1)底层是由动态数组实现的[使用了List接口]. (2)动态数组是长度不固定,随着数据的增多而变长. (3)如果不指定,默认长度为10,当添加的元素超过当前数组的长度时,会 ...
- hashmap 实现 相同的key值时,value值叠加效果。
一,了解一些基础 package com.ohs.demo; /** * * 一.需求是:停止相同的key值,覆盖效果,将重复的value值,叠加起来. * * 二.hash? 什么是hash? * ...
- LinkedHashMap源码详解
序言 本来是不打算先讲map的,但是随着对set集合的认识,发现如果不先搞懂各种map,是无法理解set的.因为set集合很多的底层就是用map来存储的.比如HashSet就是用HashMap,Lin ...
- LinkedHashMap介绍
转载:http://uule.iteye.com/blog/1522291 jdk1.7API文档链接:http://tool.oschina.net/apidocs/apidoc?api=jdk_7 ...
- 【java基础之jdk源码】集合类
最近在整理JAVA 基础知识,从jdk源码入手,今天就jdk中 java.util包下集合类进行理解 先看图 从类图结构可以了解 java.util包下的2个大类: 1.Collecton:可以理解为 ...
- LinkedHashMap就这么简单【源码剖析】
前言 声明,本文用得是jdk1.8 前面已经讲了Collection的总览和剖析List集合以及散列表.Map集合.红黑树还有HashMap基础了: Collection总览 List集合就这么简单[ ...
- 用js来实现那些数据结构12(散列表)
上一篇写了如何实现简单的Map结构,因为东西太少了不让上首页.好吧... 这一篇文章说一下散列表hashMap的实现.那么为什么要使用hashMap?hashMap又有什么优势呢?hashMap是如何 ...
- Java集合详解5:深入理解LinkedHashMap和LRU缓存
今天我们来深入探索一下LinkedHashMap的底层原理,并且使用linkedhashmap来实现LRU缓存. 摘要: HashMap和双向链表合二为一即是LinkedHashMap.所谓Linke ...
随机推荐
- Linux各目录作用
- redis学习笔记——(1)
1. NoSQL&Redis介绍 NoSQL,Not Only SQL,是非关系型的数据库.传统的关系数据库不能满足超大规模和高并发的应用. 是以Key-Value的形式存储,(例如JSON, ...
- 第二十七课:滚轮事件,mouseenter与mouseleave事件的修复
滚轮事件 jQuery核心库没有对mousewheel事件的差异性进行处理,但作为一个常用的事件,本文讲解一下. mousewheel事件只有火狐浏览器不支持.mousewheel用于取得滚动距离的属 ...
- 每天一个linux命令(41):at命令
在windows系统中,windows提供了计划任务这一功能,在控制面板 -> 性能与维护 -> 任务计划, 它的功能就是安排自动运行的任务. 通过'添加任务计划'的一步步引导,则可建立一 ...
- 每天一个linux命令(27):ln 命令
ln 是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在 每一个需要的目录下都放一个必须相同的文件,我们只 ...
- Bata版本冲刺计划及安排
下一阶段需要改进完善的功能 UI: 1. 界面不够精细,布局不够美观并且尚有BUG没有解决,图形.色彩间不够协调. 2. 理清界面间的跳转逻辑. 搜索: 搜索成功并定位后,不会影响地理标签的显示. 定 ...
- 第九章:Java----泛型学习(最后过一遍)
泛型:让集合记住里面元素的类型,避免取出时需要强制类型转换(大到小). ClassCastException! 编译阶段就能发现错误. 语法更严格! 更不容易犯错! 1. 构造器的名字还是类名, ...
- CXF 自定义拦截器
此例子来自apache cxf sample. /** * Licensed to the Apache Software Foundation (ASF) under one * or more ...
- Java基础-CGLIB动态代理
JDK的动态代理机制只能代理实现了接口的类,而不能实现接口的类就不能实现JDK的动态代理,cglib是针对类来实现代理的,他的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强,但因为采用的是继 ...
- Shell重定向&>file、2>&1、1>&2的区别
shell上: 0表示标准输入 1表示标准输出 2表示标准错误输出 > 默认为标准输出重定向,与 1> 相同 2>&1 意思是把 标准错误输出 重定向到 标准输出. & ...