迭代HashMap和ArrayList

时间:2014-05-15 12:47:23

标签: java arraylist hashmap iteration

我有hashmap和Arraylist。

的Hashmap

Map<Integer, List<String>> mMap = new HashMap<Integer, List<String>>();

这里Key(Interger)将是anotherlsit中一个元素的索引位置,value将是列表。

的ArrayList

List<testBean> mList= new ArrayList<testBean>();

现在我想迭代arraylist并将ArrayList中元素的索引位置与Map的键值进行比较。如果匹配,我会选择另一个逻辑。我在这里讨论了如何同时迭代和比较。请帮忙我就这个。

4 个答案:

答案 0 :(得分:0)

为什么不迭代列表并使用map get:

for(int i = 0;i < mList.size();i++) {
    List<String> list = mMap.get(i);
    if (list == null) {
        // index was a key in map
    } else {
        // index was not a key in map
    }
}

严格地说,如果地图中的某个键映射到空值,则这不是100%正确。在这种情况下,您可以使用mMap.containsKey()方法检查密钥在线状态。

答案 1 :(得分:0)

for(int i = 0;i < mList.size();i++) {
    if(mMap.containsKey(mList.get(i)) {
        // Put your logic here
    }
}

答案 2 :(得分:0)

理论上你可以使用迭代器:

来做到这一点
Iterator<TheBean> itb = mList.iterator();
Iterator<Entry<Integer, List<String>>> itmap = mMap.iterator();
while (itb.hasNext() && itmap.hasNext()) {
    TheBean b = itb.next();
    Entry<Integer, List<String>> e = itmap.next();

    // do you logic that I IMHO do not understand exactly.
}

但是这不起作用,因为map不会保留键的顺序。所以,如果我理解列表的索引应该匹配map的键,你可以执行以下操作:

for (int i = 0; i < mList.size(); i++) {
   TheBean b = mList.get(i);
   List<String> listOfStrings = mMap.get(i);
   if (listOfStrings != null) {
        // implement your logic here.
   }
}

我希望这会有所帮助

答案 3 :(得分:0)

尝试使用此逻辑

 for (Integer mapKey : mMap.keySet()) {
        //iterate through list
        for (String listIndex : mMap.get(mapKey)) {
            //compare the map key value with list value
            if(listIndex != null && mapKey == Integer.valueOf(listIndex)){
                //write your logic here
            }
        }
    }