Java 在映射中列出值
我希望将列表添加到映射,但无法获得所需的映射输出。 有什么方法可以获得以下所需的输出Java 在映射中列出值,java,list,dictionary,Java,List,Dictionary,我希望将列表添加到映射,但无法获得所需的映射输出。 有什么方法可以获得以下所需的输出 List l = new ArrayList(); Map<String, List<Object>> mp = new HashMap(); l.add("A"); mp.put("1", l); l.clear(); l.add("B"); mp.put("2", l); System.out.println
List l = new ArrayList();
Map<String, List<Object>> mp = new HashMap();
l.add("A");
mp.put("1", l);
l.clear();
l.add("B");
mp.put("2", l);
System.out.println(mp);
listl=newarraylist();
Map mp=新的HashMap();
l、 添加(“A”);
议员:付诸表决(“1”,l);
l、 清除();
l、 添加(“B”);
议员:付诸表决(“2”,l);
系统输出打印项次(mp);
应为:{1=[A],2=[B]}
实际值:{1=[B],2=[B]}List l=new ArrayList();
List l = new ArrayList();
Map<String, List<Object>> mp = new HashMap();
l.add("A");
mp.put("1", l);
l = new ArrayList();
l.add("B");
mp.put("2", l);
System.out.println(mp);
Map mp=新的HashMap();
l、 添加(“A”);
议员:付诸表决(“1”,l);
l=新的ArrayList();
l、 添加(“B”);
议员:付诸表决(“2”,l);
系统输出打印项次(mp);
列表是通过引用传递的,所以您需要创建两个不同的列表
List l1 = new ArrayList();
l1.add("A");
List l2 = new ArrayList();
l2.add("B");
Map<String, List<Object>> mp = new HashMap();
mp.put("1", l1);
mp.put("2", l2);
System.out.println(mp);
List l1=new ArrayList();
l1.添加(“A”);
列表l2=新的ArrayList();
l2.添加(“B”);
Map mp=新的HashMap();
mp.put(“1”,l1);
议员:付诸表决(“2”,l2);
系统输出打印项次(mp);
即使清除了列表中的值
,地图仍在引用原始列表
,因此对该列表所做的任何更改也会影响原始位置
请看根据您的代码修改的示例:
Map<String, List<Object>> mp = new HashMap<>();
for (int k = 65; k <= 91; k++) {
List<Object> l = new ArrayList<>();
l.add((char)k);
mp.put(Integer.toString(k), l);
}
System.out.println(mp);
现在将打印以下内容:
{66=[]、88=[]、67=[]、89=[]、68=[]、69=[]、90=[]……等等
映射中的每个列表
值都为空,因为它们都引用了最后清除的相同列表
现在看起来很明显,它们都会被清除,因为在循环内部,我们没有在每次迭代中清除列表
,而是将所有值一起添加到列表
,所以很明显映射
引用的是相同的列表
!
但是,使用clear
与是否引用相同的列表无关,它只是让人觉得您并没有将所有的值添加到同一个列表中,而是添加到了同一个列表中。您正在一次又一次地更新同一个列表,创建新列表非常感谢,它解决了我的问题,非常感谢helped@Barca当然可以,艾尔因此,我建议研究一下List
和List
之间的区别,因为它们不是一回事。char
是一个UTF-16代码单元,其中一个或两个编码一个Unicode码点;与ASCII无关。@Tom Budget我并不是在谈论幕后发生的事情,而不仅仅是poi代码的一部分是打印ASCII表值作为其功能,这与UTF16和ASCII相同。我觉得字符的细节与问题无关。比如说它使用的方法是wasdisplayScii
,你可以使用UTF16来实现,但这并不意味着65不是ASCII中的一个。这是关于Java不用于文本数据类型的字符编码,这个问题也不问。
Map<String, List<Object>> mp = new HashMap<>();
List<Object> l = new ArrayList<>();
for (int k = 65; k <= 91; k++) {
l.add((char)k);
mp.put(Integer.toString(k), l);
}
l.clear();
System.out.println(mp);