java数据结构模拟数据树

标签 java parsing data-structures map tree

我需要帮助来定义要使用的方法。我有一个 SOAP 响应给我一个 xml 文件。我需要在屏幕上显示 3 个相关列表。当您在第一个列表中选择一个项目时,相应的选项将出现在第二个列表中等。我只对从 xml 流中提取数据后如何有效地组织数据感兴趣。这是一个 xml 片段:

<device>
    <manufacturer>Acer</manufacturer>
    <model>A1</model>
    <platform>Android</platform>
</device>
<device>
    <manufacturer>Acer</manufacturer>
    <model>A1</model>
    <platform>J2ME</platform>
</device>
<device>
    <manufacturer>Acer</manufacturer>
    <model>A2</model>
    <platform>Android</platform>
</device>
<device>
    <manufacturer>Samsung</manufacturer>
    <model>E400</model>
    <platform>Android</platform>
</device>

所以,我将有类似 manufacturer={"Acer", "Acer", "Acer","Samsung"}, model={"A1","A1", "A2", "E400"}, platform={"Android","J2ME","Android","Android"}。

有趣的部分来了:我需要处理数据,以便我可以用它来显示 3 个列表。选择 Android 后,Acer 和 Samsung 变为可用。如果选择Acer,则有型号A1和A2可选。所有列表都需要排序。目前我正在使用 Sax 将数据解析为对象 vector ,其中包含制造商、型号、平台字段。我能想到的就是类似 TreeMap 的结构。任何建议,将不胜感激。

最佳答案

我认为层次结构不是您在这里需要的。因为用户可能会选择第一个平台或制造商。如果他选择第一个 Android,你想显示 3 个设备。如果他选择第一个 Acer,他将看到 2 个设备。

所以,我的建议如下。

  1. 创建具有属性制造商、型号、平台的设备类。
  2. 创建一个包含所有这些设备的普通链表。
  3. 创建 2 个 map :manufaturerIndex 和 plarformIndex,它们看起来像:
    Map<String, Collection<Device>> manufacturerIndex;

  4. 遍历列表一次并填充所有索引映射。

像这样:

for(Device d : devices) {
    Collection<Device> selected = manufacturerIndex.get(d.getManufacturer());
    if (selected == null) {
         selected = new ArrayList<Device>();
         manufactuerIndex.put(d.getManufacturer(), selected);
    }
    selected.add(d);
    // the same for the second index
}

现在你可以使用数据结构了。

manufactuerIndex.get("Nokia") -> 返回所有诺基亚设备。

注意这个数据结构是可扩展的。您可以随时添加任意数量的索引。

关于java数据结构模拟数据树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4216873/

相关文章:

java - 如何用最少的代码比较两个字符串列表的java集合?

C# 解析 txt 文件 IF 名称格式是所需的格式

data-structures - 这个类似于树的数据结构有一个名称 "opposite"吗?

haskell - 无限惰性位图

java - Java中向单链表添加元素

java - 模板化 Maven 原型(prototype)

java - YouTube gdata API 返回有限结果

java - Android BLE 重新订阅特性

c# - HTML 解析 c#

parsing - prolog,机器人移动语法+解析器