ArrayList的HashMap作为值初始化

时间:2015-05-28 14:12:31

标签: java arraylist hashmap

我正在尝试创建一个HashMap,其值为List<Pack>,其中Pack是我创建的对象,如果条件为真,则将Packs添加到此列表中。

现在即使条件成立我也会收到错误,我认为我没有正确初始化它可以告诉我问题在哪里吗?

static HashMap<Long, List<Pack>> ackPkts = new HashMap<Long, List<Pack>>();

static HashMap<Long, List<Pack>> dataPkts = new HashMap<Long, List<Pack>>();

static List<Pack> pktList = new ArrayList<Pack>();

if((msg.getPayloadLength()) == 0 && (msg.isSYN()) == false && (msg.isACK()) == true){ 

    Pack pack = new Pack(msg.getAck(), msg.sackPresent(), captureTime, srcIP, destIP, msg.isSYN());

    (ackPkts.get(msg.getAck())).add(pack);

} else { 

    Pack pack = new Pack(msg.getSeq(), captureTime, srcIP, destIP, 
    msg.getPayloadLength(), msg.isSYN());

    (dataPkts.get(msg.getSeq())).add(pack);


}

2 个答案:

答案 0 :(得分:0)

List<Pack>中的HashMap永远不会被定义。它们属于interface列表,但您无法确定它们是什么类型的List。您必须遵循以下结构:

Map<long, List<Pack>> map = new HashMap<>() // java 7 syntax
List<Pack> packets = new ArrayList<>();
packets.add(pack);
map.put(msg.getAck(), packets);

将一个元素添加到'List'时,你现在可以使用它,因为它存在:

map.get(msg.getAck()).add(pack);

答案 1 :(得分:0)

您希望在使用List之前将Map个实例放在第一个add()中:

static List<Pack> datapktList = new ArrayList<Pack>();
static List<Pack> actpktList = new ArrayList<Pack>();

然后将相应的List个实例添加到Map

ackPkts.put(msg.getAck(), datapktList );
dataPkts.put(msg.getAck(), actpktList );

接下来会有效:

 (ackPkts.get(msg.getAck())).add(pack);
 (dataPkts.get(msg.getSeq())).add(pack);