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