3 回答

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超10個(gè)贊
在你的情況下,你有List
接口和ArrayList
實(shí)現(xiàn),你List
在地圖的聲明中正確使用了類型,但是你傳遞到ArrayList
在循環(huán)中聲明一個(gè) implementationaion( )。
問(wèn)題出現(xiàn)是因?yàn)橐韵抡Z(yǔ)句:
Map<Integer, List<String>> data = new HashMap<>();
空菱形符號(hào)為List<String>
. 它可以是 ArrayList、LinkedList 等。所以你不能確定編譯器會(huì)使用ArrayList
實(shí)現(xiàn)。
為了支持代碼可擴(kuò)展性,建議進(jìn)行所謂的針對(duì)接口的編程。只要可以避免將代碼耦合到特定的實(shí)現(xiàn),維護(hù)最通用的類型總是好的,也就是說(shuō),當(dāng)您需要對(duì)其執(zhí)行一些具體操作時(shí),您將指定實(shí)現(xiàn)。

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
因?yàn)槟阋呀?jīng)宣布在價(jià)值型Hashmap
的List<String>
,你給ArrayList<String>
的值類型 Map.Entry
中for loop
。
更改 Map<Integer, List<String>> data = new HashMap<>();
為 Map<Integer, ArrayList<String>> data = new HashMap<>();

TA貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個(gè)贊
試試下面的代碼:
for (Map.Entry<Integer, List<String>> entry : data.entrySet()) {
Integer key = entry.getKey();
List<String> value = entry.getValue();
for(String aString : value){
System.out.println("key : " + key + " value : " + aString);
}
添加回答
舉報(bào)