Java Arraylist和Map

Java Arraylist和Map,java,dictionary,arraylist,Java,Dictionary,Arraylist,我不知道如何搜索: Random generator = new Random(); Map<Integer, ArrayList> mapOfprevOp = new HashMap<>(); ArrayList<Integer> listPrev = new ArrayList<>(); listPrev = mapOfprevOp.get(operacja); System.out.println(listPrev); // it wil

我不知道如何搜索:

Random generator = new Random();
Map<Integer, ArrayList> mapOfprevOp = new HashMap<>();
ArrayList<Integer> listPrev = new ArrayList<>();


listPrev = mapOfprevOp.get(operacja);
System.out.println(listPrev); // it will show []

int rnd = generator.nextInt(op_cnt) + 1;
listPrev.add(rnd);
System.out.println(mapOfprevOp.get(operacja)); // it will show value of listPrev

这一行的工作原理与我预期的不同?

这表明在第一次调用System.out.println时,列表是空的

如果你看这里。我们可以看到列表的toString方法返回方括号中的元素。因此[]是一个空列表

在第二次调用中,您添加了一个元素,这就是您看到它的原因。您需要记住,在Java中,我们通过引用传递对象,这意味着listPrev引用的列表与映射中包含的列表相同

如果您只想获得值,那么我建议您更改

listPrev = mapOfprevOp.get(operacja);
将来

listPrev.addAll(mapOfprevOp.get(operacja));
这将把mapOfprevOp.getoperacja中的所有元素添加到listPrev,而后续操作不会影响您想要的映射

另外,Map mappofprevop=新的HashMap;通常,最好在Delcaration中使用接口类型,就像在Map中一样。所以我会考虑把ARARYLIST转换为列表。 使用其自身的对象仍然可以是ArrayList,如下所示:

Map mappofprevop=新HashMap; List listPrev=新数组列表


这意味着,如果您想将其更改为LinkedList,则只需在一个位置而不是3个位置进行更改。请注意,除了Arrays.asList列表之外,所有列表都可以调整大小。

映射将显示您添加到列表中的值,因为它是同一个对象。因此,如何将映射的值分配给ArrayList?如何将其分开?它必须是ArrayList,因为我将在其中放置更多元素。下面是答案的一小部分,我想你可能有点误解了这一点。我只需要获取mapOfprevOp.getoperacja的值,而不是将listPrev分配给它。添加了一些解释。但基本上看一下使用addAll或复制列表。
listPrev.addAll(mapOfprevOp.get(operacja));