hashmap与arraylist的组合,用于构建复杂的结构

时间:2012-05-07 18:53:54

标签: java collections arraylist hashmap

最近3天我花时间让以下结构工作,但我无法弄清楚如何让结构工作

array
  1 => 
    array
      0 => 
        array
          'id' => '1'
          'name' => 'xyz'
      1 => 
        array
          'id' => '12'
          'name' => 'xyz1'
      2 => 
        array
          'id' => '54'
          'name' => 'xyz12'
  20 => 
    array
      0 => 
        array
          'id' => '1'
          'name' => 'xyz'
      1 => 
        array
          'id' => '12'
          'name' => 'xyz1'
      2 => 
        array
          'id' => '54'
          'name' => 'xyz12'
      3 => 
        array
          'id' => '566'
          'name' => 'xyz1234'

我尝试了下面的事情,但我无法继续前进

Map<Integer, ArrayList<HashMap<String, Object>>> data  = new HashMap<Integer, ArrayList<HashMap<String, Object>>>();

我有一个结果集,因为我有以下信息

id               | name                      | element_id
______________________________________________________________
1                | xyz                       | 1
______________________________________________________________
1                | xyz                       | 3
______________________________________________________________
12               | xyz1                      | 1
______________________________________________________________
54               | xyz11                     | 1
______________________________________________________________
566              | xyz1234                   | 3
______________________________________________________________
12               | xyz1                      | 3
______________________________________________________________
54               | xyz11                     | 3
______________________________________________________________

我的代码是

while (resultSET.next()) 
{
    Map<String, Object> tag = new HashMap<String, Object>();
    tag.put("name", resultSET.getString(3));
    tag.put("id", resultSET.getInt(2));

    tags.put(resultSET.getInt(1), tag);
}

4 个答案:

答案 0 :(得分:2)

当处理集合(集合......)的集合时,事情往往会很快变得混乱。尝试将不同的集合封装在(描述性命名的)对象中,我怀疑它将更容易管理。

答案 1 :(得分:1)

你应该试试

Map<Integer, Map<Integer, Map<Integer, Integer>>> result = new HashMap<Integer, Map<Integer,Map<Integer,Integer>>>();

在最终地图中,您将存储值

'id' => '1'
          'name' => 'xyz'

并且对于第二级地图,您应该存储

0 => 
        array
          'id' => '1'
          'name' => 'xyz'

对于最终的外部地图,你应该存储

1 => 
    array
      0 => 
        array
          'id' => '1'
          'name' => 'xyz'
      1 => 
        array
          'id' => '12'
          'name' => 'xyz1'
      2 => 
        array
          'id' => '54'
          'name' => 'xyz12'

希望这适合你

享受!!!

答案 2 :(得分:0)

Map<String, Object> tag = new HashMap<String, Object>();
tag.put("name", resultSET.getString(3));
tag.put("id", resultSET.getInt(2));

您可以做的一个明显的简化是使标记成为具有属性name和id的类。你有什么理由不想这样做吗?


关于当前代码的问题:

tags.put(resultSET.getInt(1), tag);

您需要创建一个包含标记的数组列表,然后将其放入标记中。

答案 3 :(得分:0)

没那么难......!终于明白了...... !!

HashMap<Integer, ArrayList<HashMap<String, Object>>> tags  = new HashMap<Integer, ArrayList<HashMap<String, Object>>>();

while (routeRs1.next()) 
{
    ArrayList<HashMap<String, Object>> temp_tags    =   new ArrayList<HashMap<String, Object>>();
    HashMap<String, Object> tag     =   new HashMap<String, Object>();

    if(tags.get(routeRs1.getInt(1)) == null)
    {
        tag.put("name", routeRs1.getString(3));
        tag.put("id", routeRs1.getInt(2));

        temp_tags.add(tag);

    }
    else
    {
        temp_tags   =   (ArrayList<HashMap<String, Object>>) tags.get(routeRs1.getInt(1));

        tag.put("name", resultSET.getString(3));
        tag.put("id", resultSET.getInt(2));
        temp_tags.add(tag);
    }
    tags.put(resultSET.getInt(1), temp_tags);
}
简单的软件概念就是打破问题......! :d