1

例如,我有这些对:

key => name:

"name" => "myname1"
"height" => "myheight1"
"name" => "myname2"
"height" => "myheight2"

现在,如果我将所有这些都放入哈希表中,那么第二个nameheight键将覆盖第一个键nameheight键名。我可以将它添加到两个不同的哈希表中,但在运行之前,我不知道会有多少这样的对,所以我不知道我需要多少个哈希表。那么如何将这些巴黎添加到列表中(在运行前不知道此类对的确切数量(例如,有时可能有三个名称键和两个高度键及其值等)。

因此,当我添加所有这些值时,我需要在列表中显示如下:

list<list<Object>> = [[{name=myname1, height=myheight1}], [{name=myname2, height=myheight2}]]

例如,如果存在不同数量的此类对,例如两个名称和三个高度对:

list<list<Object>> = [[{name=myname1, height=myheight1}], [{name=myname2, height=myheight2}], [{height=myheight3}]]

注意:我从 xml 文件中获取这些对,因此它们有些分组,就像每次迭代我都会得到一组这样的对。例如

<main>
  <group>
    <name>myname1</name>
    <height>myheight1</height>
  </group>
  <group>
    <name>myname2</name>
    <height>myheight2</height>    
  </group>
</main>

那么我怎样才能正确地将这样的对添加到列表中,这样键就不会相互覆盖,以后我可以从列表中得到我想要的任何对?

4

4 回答 4

3

为什么不只使用列表:

List<Group> groups = new ArrayList<Group>();

其中Group定义为

public class Group {
    private final String name;
    private final int height;

    public Group(String name, int height) {
        this.name = name;
        this.height = height;
    }

    // getters are left as an exercise to the reader
}

(根据高度的表示,您可能需要使用除 int 之外的其他类型)。

编辑

另一种选择是使用诸如 Groovy 之类的动态语言,它使此类任务变得更加容易(因为您不必跟踪您的 XML 文档结构)。这是一个例子:

http://groovyconsole.appspot.com/edit/1445001

于 2013-11-13T12:27:43.273 回答
1

通常,您可以使用 a Map<String,List<String>>(或 aSet作为第二个参数,如果您不关心顺序)。

更具体地说,如果您的数据是结构化的,那么您的代码和类也应该是结构化的。在这种情况下,考虑创建一个Group类来保存您的(半)结构化数据:

public class Group {
    String name , height;
    // constructor, getters, setters
}

并将对象填充到List<Group>(或Set如上所述)中。要检索这些对,您只需遍历List

List<Group> groups = ....
for ( Group g : groups ) {
    System.out.println( "name=>" + g.getName() + ", height=>" + g.getHeight() );
}

干杯,

于 2013-11-13T12:26:32.887 回答
0

我宁愿去新班说

Class Entry
{
  String name;
  String height
}

现在添加条目 List<Entry>

于 2013-11-13T12:29:34.307 回答
0

正如其他一些答案所说,您可能需要将您的“价值”类型作为列表。

class MyClass {
    ....    
    Map<String, List<String>> myMap = new HashMap<String, List<String>>();
    ....
    public void addPair(final String key, final String value) {
        if (myMap.containsKey(key)) {
            myMap.get(key).add(value);
        } else {
            final List<String> newList = new ArrayList<String>();
            newList.add(value);
            myMap.put(key, newList);
        }
    }

}

于 2013-11-13T12:32:27.013 回答