如何将HashMap<String, ArrayList<String>>存储到列表中?

24

我的哈希表以字符串为键,以数组列表为值。现在,我需要将其嵌入到列表中。也就是说,它将采用以下格式:

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

有谁可以帮我确定在列表中使用哪种方法以及如何将我的地图存储到其中?


你的意思是需要一个这种形式的地图列表吗? - Olimpiu POP
我假设你正在使用Java,并且你大部分的 ( 实际上应该是 < - CodesInChaos
是的,这是Java。由于“<”未正确显示,我使用了“(”代替。 - user2376600
是的,一个存储我的地图细节的列表...检索我的列表应该显示我的地图条目... - user2376600
5个回答

35

始终尝试在集合中使用接口引用,这样可以增加更多的灵活性。
以下代码有什么问题?

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.

您可以像上面那样轻松完成它。


16

首先,让我稍微更正一下你的声明:

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

好的,现在我们准备将地图添加到列表中:

listOfMapOfList.add(mapOfList);

BUT:

立即停止创建复杂的集合!想一想未来:您可能需要将内部映射更改为其他类型,例如列表、集合等。这可能会导致您重写代码的大部分内容。相反,定义一个包含数据的类,然后将其添加到一维集合中:

我们称您的类为学生(仅作为示例):

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

很好的回答,希望你不介意我调整了你的代码格式。 - Duncan Jones

3

请尝试以下方法:

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

如果你的列表必须是类型为 List<HashMap<String, ArrayList<String>>>,那么请将你的 map 变量声明为 HashMap 而不是 Map

2

首先,您需要将 List 定义为:

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

要将Map添加到List中,请使用add(E e)方法:
list.add(map);

1
在当前的 maplist 定义下,那是行不通的。 - Duncan Jones
1
我撤销了这篇帖子的编辑,因为编辑者没有留下评论或作者没有确认。 - Duncan Jones

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];
}

这段代码的一些解释可能会有所裨益。 - Pyves
当然可以。事实上,我需要一个解决方案来解决上述问题,你能否澄清一下?在下一篇帖子中,我会详细解释整个代码。 - James

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接