map的数据结构类似于数据库的数据存储方式,键和值的对应,之间的映射,更重要的一点是通过map.entry这个类似于指针的接口在外部对其进行任意的修改。在这里我们通过一个动态生成树的例子介绍一下它的用法吧...
网页中,树型目录菜单是一个很常见的菜单显示方式,通常我们都是利用已经设置好的数据通过客户端脚本拼装后展现,在树的结构比较简单或要求显示效果绚丽的话,是一个很好的选择。如果我们的树型目录是一个不断变化的树呢,比如用树来显示一个部门的所有员工的在线状态?
这时我们就需要考虑用后台实现了,通过map,我们假设它的key对应的是树的目录名称,key对应它的链接地址。如果有下级目录,则把该目录再封装到一个新的map中,作为主map的一个节点。这样就可以使用一个主map展现目录的所有内容了。
代码贴出来吧,发现这里的html代码编辑功能实在太差了-_-!!.
/**
* 列出树型列表的所有元素
* 该方法将把所有节点的元素展开,如果需要,应该在前台进行重新包装
* 这里要注意的是map的实现类要为TreeMap,其他类型的话,要修改
* equals(TreeMap.class) ,下面的另一个方法同理
* @param map
* @return
*/
public static String getType(Map map) {
Set set = map.entrySet();
Iterator it = set.iterator();
while (it.hasNext()) {// 把当前要遍历的节点当作根节点
Map.Entry entry = (Map.Entry) it.next();
if (entry.getValue().getClass().equals(TreeMap.class)) {// 下一级节点
System.out.println(entry.getKey());// 读取该节点的名称
getType((TreeMap) entry.getValue());
} else {// 到达该节点的顶点
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
return null;
}
利用迭代的方法可以写出取某节点下的所有内容、指定节点的内容等功能,方法大同小异,这里不敷述了。map的数据来源可以是多样的,最主要的是从数据库中取得数据,对于map如何和数据库数据进行映射,网上应该资料很多,关键在于把所需要的数据先包装到一个bo中,再对map进行填充。目前hibernate应该是不个不错的选择。
map于xml的转换,其实也是很简单的:
/**
* 将map类型数据转换成XML文档
*
* @param map
* 该节点
* @param element
* 上一级节点
* @return
*/
public void parseToXML(Map map, Element element) {
/** 开始对map进行解析 */
if (map == null)
throw new NullPointerException("map 数据为空,不能解析!");
Set set = map.entrySet();
Iterator records = set.iterator();
while (records.hasNext()) {
Map.Entry entry = (Map.Entry) records.next();
if (entry.getValue().getClass().equals(TreeMap.class)) {// 子目录
Element node = new Element("node");
node.setAttribute("name", entry.getKey().toString());
element.addContent(node);
parseToXML((TreeMap) entry.getValue(), node);
} else {// 到达顶点
Element node = new Element("node");
node.setAttribute("name", entry.getKey().toString());
Element value = new Element("value");
value.setText(entry.getValue().toString());
node.addContent(value);
element.addContent(node);
}
}
}
注意的是element是需要获取的,当我们声明了一个xml doc文档后,根节点root可以作为参数传进去,处理完后,再对root进行读取就可以了:
parseToXML(map, root);
doc = new Document(root);
这样我们就可以把map转换成一个树型目录了,具体的应用,随意了。
网页中,树型目录菜单是一个很常见的菜单显示方式,通常我们都是利用已经设置好的数据通过客户端脚本拼装后展现,在树的结构比较简单或要求显示效果绚丽的话,是一个很好的选择。如果我们的树型目录是一个不断变化的树呢,比如用树来显示一个部门的所有员工的在线状态?
这时我们就需要考虑用后台实现了,通过map,我们假设它的key对应的是树的目录名称,key对应它的链接地址。如果有下级目录,则把该目录再封装到一个新的map中,作为主map的一个节点。这样就可以使用一个主map展现目录的所有内容了。
代码贴出来吧,发现这里的html代码编辑功能实在太差了-_-!!.
/**
* 列出树型列表的所有元素
* 该方法将把所有节点的元素展开,如果需要,应该在前台进行重新包装
* 这里要注意的是map的实现类要为TreeMap,其他类型的话,要修改
* equals(TreeMap.class) ,下面的另一个方法同理
* @param map
* @return
*/
public static String getType(Map map) {
Set set = map.entrySet();
Iterator it = set.iterator();
while (it.hasNext()) {// 把当前要遍历的节点当作根节点
Map.Entry entry = (Map.Entry) it.next();
if (entry.getValue().getClass().equals(TreeMap.class)) {// 下一级节点
System.out.println(entry.getKey());// 读取该节点的名称
getType((TreeMap) entry.getValue());
} else {// 到达该节点的顶点
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
return null;
}
利用迭代的方法可以写出取某节点下的所有内容、指定节点的内容等功能,方法大同小异,这里不敷述了。map的数据来源可以是多样的,最主要的是从数据库中取得数据,对于map如何和数据库数据进行映射,网上应该资料很多,关键在于把所需要的数据先包装到一个bo中,再对map进行填充。目前hibernate应该是不个不错的选择。
map于xml的转换,其实也是很简单的:
/**
* 将map类型数据转换成XML文档
*
* @param map
* 该节点
* @param element
* 上一级节点
* @return
*/
public void parseToXML(Map map, Element element) {
/** 开始对map进行解析 */
if (map == null)
throw new NullPointerException("map 数据为空,不能解析!");
Set set = map.entrySet();
Iterator records = set.iterator();
while (records.hasNext()) {
Map.Entry entry = (Map.Entry) records.next();
if (entry.getValue().getClass().equals(TreeMap.class)) {// 子目录
Element node = new Element("node");
node.setAttribute("name", entry.getKey().toString());
element.addContent(node);
parseToXML((TreeMap) entry.getValue(), node);
} else {// 到达顶点
Element node = new Element("node");
node.setAttribute("name", entry.getKey().toString());
Element value = new Element("value");
value.setText(entry.getValue().toString());
node.addContent(value);
element.addContent(node);
}
}
}
注意的是element是需要获取的,当我们声明了一个xml doc文档后,根节点root可以作为参数传进去,处理完后,再对root进行读取就可以了:
parseToXML(map, root);
doc = new Document(root);
这样我们就可以把map转换成一个树型目录了,具体的应用,随意了。