2015-05-28 67 views
-5

我試圖製作一個HashMap,其值爲List<Pack>,其中Pack是我創建的一個對象,如果條件爲真,則會將Packs添加到此列表中。ArrayList的HashMap作爲值的初始化

即使條件爲真,我仍然會收到錯誤,並且我認爲我沒有正確初始化它,有人可以告訴我問題在哪裏?

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); 


} 
+5

什麼是'msg'?你得到哪個錯誤?哪裏?你有調試嗎? –

+0

我沒有調試,因爲我知道我錯誤地初始化了它.and msg只是我正在使用的一個庫中的一個類,它不是問題..我用它來獲取序列號,這是我的散列圖的關鍵字 – yasmink

回答

0

HashMap S中List<Pack>從來沒有定義。它們是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); 
+0

這完美和輕鬆地解決了我的問題,謝謝! – yasmink

+0

我的榮幸,不要忘記接受答案,如果它解決了你的問題,如果你認爲它是一個高質量的答案uovote! – ShellFish

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);