如何解决从数组列表中创建树例如,ResultSet
|| 我有一个数组列表,如下所示:List<String[]> myList = new ArrayList<String[]>();
myList.add( new String[]{\"A1\",\"B1\",\"C1\",\"D1\",\"values\"} );
myList.add( new String[]{\"A1\",\"C2\",\"D2\",\"values\"} );
myList.add( new String[]{\"A2\",\"values\"} );
我需要填充一个与父亲有依赖性的对象,因此:
A1只有一个孩子B1。
B1有2个孩子,C1和C2。
C1有1个孩子D1,其值...
C2有两个子D1和D2,它们的值...
A2只有一个孩子,B1(与另一个孩子不同)
B1只有一个孩子,C1 ...等。
您认为哪种结构更好?我需要名称A1,B1等。
我有关于Maps,Arrays,Lists的探针...我认为该算法是不可能的... :( :(
请帮忙!
编辑说明:
我有一个具有5个或6个GROUP BY子句的数据库中的ResultSet。我有所有简单的数据,
我需要使用文本对象构建一个结构,例如:
Person A - Building 1 - Tower 1 - Some Text A
Person A - Building 1 - Tower 2 - Another Text
Person A - Building 2 - Tower 1 - Another one Text
Person A - Building 2 - Tower 3 - My Text
Person B - Building 1 - Tower 2 - Any Text
Person B - Building 3 - Tower 1 - A Text...
我需要此数据的对象结构...可能吗?
解决方法
我做的 !哦,我的上帝! :D:D:D:D:D:D:D ...
private static void finalFillerTotalSuperSpecial(List<String[]> initialList,HashMap<String,Object> mapa){
String[] currentElement = null;
String currentKey = null;
String[] nextElement = null;
String nextKey = null;
int i=0,start,end;
while (i < initialList.size()) {
start = i;
currentElement = initialList.get( i++ );
currentKey = currentElement[0];
if (i<initialList.size()){
nextElement = initialList.get( i );
nextKey = nextElement[0];
}
HashMap<String,Object> insideMap = new HashMap<String,Object>();
mapa.put(currentKey,insideMap);
while (currentKey.equals(nextKey) && i < initialList.size()) {
currentElement = initialList.get( i++ );
currentKey = currentElement[0];
if (i<initialList.size()){
nextElement = initialList.get( i );
nextKey = nextElement[0];
}
}
end = i;
List<String[]> listOfCurrentElements = new ArrayList<String[]>();
for (int j=start;j<end;j++)
listOfCurrentElements.add( getNextArray(initialList.get(j)) );
if ( listOfCurrentElements.get(0).length>1 )
finalFillerTotalSuperSpecial(listOfCurrentElements,insideMap);
else
insideMap.put(listOfCurrentElements.get(0)[0],null);
}
}
,当然可以。 :)
我认为您所描述的内容可以通过通用树或n元树来解决。那是一棵树,其中每个节点可以具有任意数量的子代。我写了一些用Java做到这一点的东西。
如果您不想构建树,则可以使用Map<String,Set<String>>
进行构建。这实际上并不能使您轻松访问树操作,但是它应保持以下关系:
Map<String,Set<String>> myNodes = new LinkedHashMap<String,Set<String>>();
for(String[] myArray : myList) {
String previousNode = null;
for(String node : myArray) {
if(myNodes.get(node) == null) {
myNodes.put(node,new HashSet<String>());
}
if(previousNode != null) {
myNodes.get(previousNode).add(node);
}
previousNode = node;
}
}
因此,您基本上得到了(我正在使用JSON进行演示):
{
A1: [\"B1\"],A2: [\"B1\"],B1: [\"C1\",\"C2\"],C1: [\"D1\"],C2: [\"D1\",\"D2\"],D1: [\"values\"],D2: [\"values\"]
}
但是,这比一棵树更难遍历。
,因此,您想从此列表的树的特定表示形式构建树结构。
对于任何树结构,它的节点可以有0到n个子节点,因此这些子节点可以琐碎地存储在List
中(如果要快速查找名称,可以选择将其存储在Map
中)。对于此任务,似乎不需要存储父引用。
然后,您只需要遍历myList
。对于每个数组元素,
取现有树的根。
遍历数组。
对于数组中的每个字符串,请检查当前树节点是否有一个具有此名称的子节点。
如果不是,请创建它并将其添加到树中。
移到子节点(因此它成为当前节点)。
从数组中获取下一个字符串,然后从步骤3开始重复。
从列表中获取下一个数组,然后从步骤1开始重复。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。