Java Map / TreeMap:修改现有条目而不删除条目

时间:2016-06-16 15:13:56

标签: java treemap

所以我将Map定义为

Map<Integer, Object[]> data = new TreeMap<Integer, Object[]>();

我在循环读取文本文件时添加数据。对于大多数数据,我将添加它并继续前进。但是,文件中的数据需要应用回现有条目而不删除它或删除它的位置。实施例。

data.put(counter, new Object[] {ex1, ex2, ex3, ex4});

所以,如果我要添加一个期望以后有数据的条目我需要添加(编辑:它可以附加),是否有办法保留现有数据并附加新数据?实施例。

首先,

data.put(counter, new Object[] {"testData1", "testData2", "testData3", "testData4"});

当我循环到需要添加的数据时,我需要能够将“testData5”添加到结束位置,同时只知道最初添加数据时计数器的值。

有没有办法在不删除特定条目中的现有数据的情况下执行此操作?

编辑:可以附加数据,为此更改示例。

1 个答案:

答案 0 :(得分:1)

使用你的阵列,它非常混乱。我同意您应该使用列表的注释,这些注释允许您只使用列表引用而不必在地图上设置任何内容。

使用数组(讨厌!)

while(/* fancy argument */) {
    int counter; //you promised me this
    String argument; //and this

    Object[] foo = data.get(counter); //find what is stored on the map  
    Object[] bar; //our expected result

    if(foo == null) { //create a new array and append it
        bar = new Object[1];
        bar[0] = argument;
    }
    else { //fill the new array
        bar = new Object[foo.length+1];
        for(int i = 0; i < foo.length; i++) {
            bar[i] = foo[i];
        }
        bar[foo.length] = argument;
    }

    data.set(counter, bar); //put the updated array into the map
}

使用列表(清洁!)

while(/* fancy argument */) {
    int counter; //you promised me this
    String argument; //and this

    List<Object> foo = data.get(counter); //find what is stored on the map  
    //and we don't need bar since we can play with foo

    if(foo == null) { //we have a new list we need to add
        foo = new ArrayList<>();
        data.set(counter, foo); //put it in the map
    }

    foo.add(argument); //add to list, don't need to re-put since it's already there
}