我们经常用到一些树状的数据结构,在数据库中通常是用一个字段来记录其父节点的ID。在生成树状结构时,通常使用递归遍历的方法。在某些场合下,如果数据量不大,且更新不是很频繁时,可以将数据库的数据缓存到内存中。下面用一个自定义的特定的Map来保存这些数据:
MultiKeyMap.java
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
* @author eyes1842
*
* @param <K> Key type
* @param <V> Value type
*/
public class MultiKeyMap<K,V>{
private Map<K,MultiKeyMap.Entry<K, V>> map = new HashMap<K,MultiKeyMap.Entry<K, V>>();
public V put(K pkey, K fkey, V value) {
MultiKeyMap.Entry<K,V> entry = new MultiKeyMap.Entry<K,V>(fkey, value);
map.put(pkey, entry);
return value;
}
public V get(K pkey) {
MultiKeyMap.Entry<K,V> entry = map.get(pkey);
if(entry!=null&&!entry.isEmpty())
return entry.getValue();
else
return null;
}
public V remove(K pkey){
Entry<K,V> e = map.remove(pkey);
return (e == null ? null : e.value);
}
public void clear(){
map.clear();
}
public Collection<V> values(){
Collection<V> result = null;
if(!map.isEmpty()){
result = new ArrayList<V>(map.size());
for(MultiKeyMap.Entry<K,V> entry : map.values()){
result.add(entry.getValue());
}
}
return result;
}
public Collection<V> getByFKey(K fkey) {
Collection<MultiKeyMap.Entry<K,V>> entrys = map.values();
Collection<V> result = null;
if(!entrys.isEmpty()){
result = new ArrayList<V>();
if(fkey==null)
return result;
for(MultiKeyMap.Entry<K,V> entry : entrys){
if(entry.getKey().equals(fkey))
result.add(entry.getValue());
}
}
return result;
}
static class Entry<K,V> {
final K key;
V value;
Entry(K k, V v) {
value = v;
key = k;
}
public final K getKey() {
return key;
}
public final V getValue() {
return value;
}
public final V setValue(V newValue) {
V oldValue = value;
value = newValue;
return oldValue;
}
public boolean isEmpty(){
return (this==null||getKey()==null);
}
public final boolean equals(MultiKeyMap.Entry<K,V> o) {
if (!(o instanceof MultiKeyMap.Entry))
return false;
Object k1 = getKey();
Object k2 = o.getKey();
if (k1 == k2 || (k1 != null && k1.equals(k2))) {
Object v1 = getValue();
Object v2 = o.getValue();
if (v1 == v2 || (v1 != null && v1.equals(v2)))
return true;
}
return false;
}
public final int hashCode() {
return (key==null ? 0 : key.hashCode()) ^
(value==null ? 0 : value.hashCode());
}
public final String toString() {
return getKey() + "=" + getValue();
}
}
/**
* Test
* @param args
*/
public static void main(String[] args) {
MultiKeyMap<Integer,String> map = new MultiKeyMap<Integer,String>();
map.put(0, 0, "hello_0");
map.put(1, 0, "hello_1");
map.put(2, 0, "hello_2");
map.put(3, 2, "hello_3");
map.put(4, 3, "hello_4");
List<String> ss = (List<String>) map.getByFKey(0);
for(String s : ss)
System.out.println(s);
}
}
这是一个多键值的Map,使用起来很方便,可以具有一般的Map的特点,又支持类似数据库中的主外健的特点。可以根据父节点获取其子节点列表。
分享到:
相关推荐
2. 树结构:课程目录通常采用树形结构表示,层次清晰,便于用户理解和查找相关内容。 3. 数组和集合:网站后台数据库可能使用数组或集合来存储课程数据,如学生报名信息、课程评价等,方便查询和更新。 4. 哈希表:...
这可能涉及到递归查询或层次查询,例如使用`CROSS APPLY`或`WITH`子句(自连接)来生成树形数据。 3. **后台处理**:在VS2008中,可能使用C#或VB.NET编写后台代码,通过ADO.NET连接数据库,执行上述查询,然后将...
这个函数使用`$.ajax()`(在jQuery中)或其他类似的方法,向服务器发送GET或POST请求,URL指向处理树形数据的服务器端接口。 3. **服务器端处理**:在服务器端,我们需要一个后端脚本来接收并处理这个请求。它可以...
Layui是一个基于前端MVC模式的轻...总结来说,Layui的treeTable是前端开发中处理层级数据的强大工具,通过合理的配置和API调用,可以构建出灵活、高效、交互性强的树形表格,尤其适合展示具有无限层级的复杂数据结构。
树型结构是一种非线性的数据结构,它模仿了自然界中的树形结构,由根节点、分支节点和叶节点组成。在Web应用中,树型结构常用于表示多层次的数据关系,如文件系统、组织架构图、产品分类等。当数据量庞大时,如何...
优化点包括使用高效的数据结构(如平衡二叉搜索树)存储数据,以及利用缓存机制减少不必要的数据请求。 7. **UI定制**:为了满足不同设计需求,`TreeView`通常允许自定义节点的样式,包括文字颜色、背景色、图标等...
【Element UI 树形控件】是前端框架Element UI中的一种组件,用于展示层次结构的数据,常用于构建如文件系统、组织结构等场景。...总之,正确处理和构建树形数据结构对于高效使用Element UI的树形控件至关重要。
社区网部分数据结构可能指的是社区网络平台(如社交网站、论坛等)在后台使用的数据结构设计。这些数据结构对于优化社区网络的功能至关重要,包括用户交互、信息检索、关系网络构建等多个方面。 首先,我们来了解...
1. **数据结构**:首先,后台PHP脚本需要将数据结构化为树形,通常以数组或JSON格式存储。每个节点包含ID、文本、子节点等属性。 2. **前端渲染**:JavaScript利用这些数据生成HTML结构,构建出可视化的树形菜单。...
1. **组织结构树形节点**:在许多企业系统中,数据和资源的组织方式通常是通过树形结构来实现的,模拟了现实世界中的层级关系。例如,公司内部的部门、团队等可以被视为树形结构的节点。用户可以根据这些节点来访问...
在IT行业中,动态树形菜单是一种常见的用户界面元素,它能以树状结构展示数据,使得用户能够方便地浏览和操作层次化的信息。本项目利用Ajax、JSP和Oracle数据库技术,实现了这样一个功能,让我们来深入探讨一下这些...
在Web开发中,树形菜单是一种常见的数据展示形式,用于组织和展示层次结构的数据。JSTree是一款基于JavaScript的开源库,专为构建功能丰富的交互式树形菜单而设计。它支持动态加载大量节点,即使面对超过10000个节点...
全静态树形论坛ASP是一种基于ASP(Active Server Pages)技术构建的在线讨论平台,它具有独特的树状结构,便于用户浏览和参与讨论。这个论坛设计的主要特点是其静态化处理,这意味着论坛页面在用户访问时无需服务器...
树形菜单是一种以节点和层级关系展示数据的控件,每个节点可以有子节点,形成一棵倒置的树状结构。在Web应用中,这种菜单常用于组织大量有层次的数据,如文件系统、组织架构或导航菜单。 在ExtJS中,实现无限树菜单...
堆是一种特殊的树形数据结构,通常用于优先队列或实现高效排序算法。在树形框中,堆可以帮助我们快速找到最大或最小的节点,优化搜索性能。 在提供的文件"源码使用说明.txt"中,可能会详细解释如何实现上述优化策略...
2. **代码逻辑**:`DefaultTree.aspx.cs`是后台处理代码,其中包含了加载树形结构的逻辑。这部分代码可能包括获取数据源(如数据库查询)、构造TreeNode对象并添加到TreeView控件中,以及处理节点展开和折叠的事件。...
4. **前端展示**:利用MzTreeView或其他类似的JavaScript库,将后端返回的权限数据渲染成树形结构。用户可以通过点击、拖拽等方式对树节点进行操作,这些操作会触发Ajax请求更新后端数据。 5. **权限控制**:在业务...
在IT领域,尤其是在Web开发中,无限级树形菜单是一种常见的数据结构,它用于构建具有层级关系的导航系统。在本场景中,我们关注的是如何在Sql数据库中存储和操作这种无限级树形结构,以及如何在前端展示。以下是相关...
在网页开发中,树形菜单是一种常见的数据展示方式,它以层级结构呈现,常用于网站导航、文件系统浏览等场景。Ajax(Asynchronous JavaScript and XML)技术则为动态更新页面内容提供了可能,无需刷新整个页面即可与...
而“动态树形列表”是一种数据展示方式,它使用了树状结构来组织和展示信息,用户可以通过展开和折叠节点来探索层级关系。这种列表通常用于文件系统、菜单导航、组织结构等场景,能够清晰地呈现复杂的层次结构。 ...