1

我需要比较两个不同大小的不同 Arraylist。

我可以用两个循环来做到这一点——但我需要使用迭代器。

第二个循环只迭代一次而不是 n 次。

while (it.hasNext()) {
    String ID = (String) Order.get(i).ID();
    j = 0;              
    while (o.hasNext()) {   
        String Order = (String) Order.get(j).ID();
        if (myOrder.equals(Order)) {
            //do sth
        }
        j++;
        o.next();
    }
    i++;
    it.next();
}
4

4 回答 4

4

您可以以比您更简单的方式使用迭代器:

Iterator<YourThing> firstIt = firstList.iterator();
while (firstIt.hasNext()) {
  String str1 = (String) firstIt.next().ID();
  // recreate iterator for second list
  Iterator<YourThing> secondIt = secondList.iterator();
  while (secondIt.hasNext()) {
    String str2 = (String) secondIt.next().ID();
    if (str1.equals(str2)) {
      //do sth
    }
  }
}
于 2013-01-18T10:54:32.447 回答
2

您需要为 例如o的每次迭代实例化迭代器it

while (it.hasNext()) {
   Iterator<String> o = ...
   while (o.hasNext()) {
     // ...
   }
}

NB。你不需要索引变量j。您可以调用o.next()以获取迭代器引用的列表元素。

于 2013-01-18T10:43:03.357 回答
1

关于什么

List<String> areInBoth = new ArrayList(list1);
areInBoth.retainAll(list2);
for (String s : areInBoth)
    doSomething();

您需要调整对象的 equals 方法以比较正确的内容(示例中的 ID)。

于 2013-01-18T10:51:40.607 回答
1
Iterator<Object> it = list1.iterator();
while (it.hasNext()) {
    Object object = it.next();
    Iterator<Object> o = list2.iterator();
    while (o.hasNext()) {   
        Object other = o.next();
        if (object.equals(other)) {
            //do sth
        }
    }
}

两个iterators是因为有两个列表,每个列表都object检查下一个并获取下一个项目(hasNext()next())。

于 2013-01-18T11:00:28.097 回答