2013-05-13 103 views
19

我的hashmap存儲字符串作爲鍵和arraylist作爲值。現在,我需要將其嵌入到列表中。也就是說,這將是以下形式:如何將HashMap <String,ArrayList <String>>存儲在列表中?

List<HashMap<String, ArrayList<String>>> 

這是我曾經用過的聲明:

Map<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>(); 
ArrayList<String> arraylist = new ArrayList<String>(); 
map.put(key,arraylist); 
List<String> list = new ArrayList<String>(); 

誰能幫助我這方法,以及如何在列表中用來進行存儲我映射到它?

+0

您的意思是你需要一個這種形式的地圖列表? – 2013-05-13 06:49:31

+0

我假設你正在使用java,並且你的大多數'('實際上應該是'<'。 – CodesInChaos 2013-05-13 06:52:04

+0

Yeah..its java ..既然'<'顯示不正確,我用'(' – user2376600 2013-05-13 06:58:56

回答

28

總是嘗試使用Collection中的接口引用,這增加了更多的靈活性。
下面的代碼有什麼問題?

List<Map<String,List<String>>> list = new ArrayList<Map<String,List<String>>>();//This is the final list you need 
Map<String, List<String>> map1 = new HashMap<String, List<String>>();//This is one instance of the map you want to store in the above list. 
List<String> arraylist1 = new ArrayList<String>(); 
arraylist1.add("Text1");//And so on.. 
map1.put("key1",arraylist1); 
//And so on... 
list.add(map1);//In this way you can add. 

您可以輕鬆地做到這一點像上面。

2

嘗試以下操作:

List<Map<String, ArrayList<String>>> mapList = 
    new ArrayList<Map<String, ArrayList<String>>>(); 
mapList.add(map); 

如果您的列表必須是List<HashMap<String, ArrayList<String>>>類型,然後聲明您map變量作爲HashMap而不是Map

1

首先,您需要定義List爲:

List<Map<String, ArrayList<String>>> list = new ArrayList<>(); 

要將Map添加到List,使用add(E e)方法:

list.add(map); 
+1

鑑於'map'和'list'的當前定義,這不起作用 – 2013-05-13 07:01:29

+1

我在此回退編輯由於缺少編輯的意見或作者的確認 – 2013-05-13 07:14:34

13

首先,讓我解決一點點你的宣言:

List<Map<String, List<String>>> listOfMapOfList = 
    new HashList<Map<String, List<String>>>(); 

請注意,我只用了一次具體課程(HashMap)。使用可以在稍後改變實現的界面非常重要。

現在你想添加元素到列表中,不是嗎?但是元素是地圖,所以您必須創建它:

Map<String, List<String>> mapOfList = new HashMap<String, List<String>>(); 

現在您要填充地圖。幸運的是,你可以使用的工具,爲您創建列表,否則你必須單獨創建列表:

mapOfList.put("mykey", Arrays.asList("one", "two", "three")); 

OK,現在我們已經準備好地圖添加到列表中:

listOfMapOfList.add(mapOfList); 

但是:

立即停止創建複雜的集合!想想未來:您可能必須將內部映射更改爲其他內容或列表進行設置等。這可能會導致您重新編寫代碼的重要部分。相反,定義一個包含你的數據類,然後將其添加到一個立體的集合:

讓我們把你的類Student(只是爲例):

public Student { 
    private String firstName; 
    private String lastName; 
    private int studentId; 

    private Colectiuon<String> courseworks = Collections.emtpyList(); 

    //constructors, getters, setters etc 
} 

現在,您可以定義簡單的集合:

Collection<Student> students = new ArrayList<Student>(); 

如果將來你想要把你的學生進入地圖,關鍵是studentId,做到這一點:

Map<Integer, Student> students = new HashMap<Integer, Student>(); 
+0

好的答案,希望你不介意我調整了你的代碼格式 – 2013-05-13 09:02:22

0
class Student{ 
    //instance variable or data members. 

    Map<Integer, List<Object>> mapp = new HashMap<Integer, List<Object>>(); 
    Scanner s1 = new Scanner(System.in); 
    String name = s1.nextLine(); 
    int regno ; 
    int mark1; 
    int mark2; 
    int total; 
    List<Object> list = new ArrayList<Object>(); 
    mapp.put(regno,list); //what wrong in this part? 
    list.add(mark1); 
    list.add(mark2);** 
    //String mark2=mapp.get(regno)[2]; 
} 
+0

對這段代碼的一些解釋可能會有好處 – Pyves 2017-06-14 09:08:23

+0

是的,對於當然,事實是,我需要一個解決方案,以上可以清除它。通過下一篇文章,我將正確解釋整個代碼。 – James 2017-06-14 09:10:40

相關問題