在列表中,存储的地图的值是对象类型

时间:2014-01-29 16:25:41

标签: java list map

我有一张地图,该地图的内容已添加到列表中。我发现的问题 调试是在列表中添加的对象(不是它们的值)不应该发生。

将数据添加到地图中的代码:

 List<Pair> pairList = new ArrayList<Pair>();
 Map<Long, Integer> result = new LinkedHashMap<Long, Integer>();
 for (Object[] arr : list) {
    result.put((Long) arr[0], (Integer) arr[1]);
 }

将数据从地图传输到列表中的代码:

for(Map.Entry<Long, Integer> entries : result.entrySet()){
    pairList.add(new Pair(entries.getKey(), entries.getValue()));
}

现在的问题是,在检查列表时,它包含应该包含值的对象。上述测试用例有什么问题?

2 个答案:

答案 0 :(得分:0)

您的列表属于Pair类型。您创建一个新的Pair对象并将其添加到列表中。调试列表时,您确实会看到整个对象列表。 Pair类型的对象。如果您检查这些Pair个对象,您将看到值。

答案 1 :(得分:0)

好的,我们来看看代码:

List<Pair> pairList = new ArrayList<Pair>();

这一行清楚地表明pairListList的{​​{1}}。

Pair

Map<Long, Integer> result = new LinkedHashMap<Long, Integer>(); for (Object[] arr : list) { result.put((Long) arr[0], (Integer) arr[1]); } 未在此代码位中定义,因此据我们所知,您正在迭代包含对象数组的随机列表,即list类型为list。在这段代码中有一些可疑的东西,看起来好像你通过地图将东西从一个列表改为另一个列表。我无法想象任何合理的情况,但让我们继续......

List<Object[]>

在这里,您迭代地图中的条目,并将它们放入for(Map.Entry<Long, Integer> entries : result.entrySet()){ pairList.add(new Pair(entries.getKey(), entries.getValue())); } 对象,然后将其放入我们的Pair

因此,您放入列表的内容实际上是pairList不是映射条目的值。如果您需要输入值,则只需输入值。

除了现在的Pair对象之外,其使用方式与Pair相同;所以除非你想用你的Map.Entry做一些自定义魔术,否则你不需要有一个自定义类来表示键值对。

如果您坚持保留Pair类,但希望能够通过打印列表或检查IDE调试器中的列表来调试它们,那么您可能希望覆盖Pair toString()课程中的方法。