Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,如何同时遍历两个列表?_Java - Fatal编程技术网

在Java中,如何同时遍历两个列表?

在Java中,如何同时遍历两个列表?,java,Java,例如 假设我们确定list1.size()等于list2.size(),如何在一个语句中遍历这两个列表 可能类似于(字符串str1:list1,str2:list2)?使用基本循环 for(String str : list1) { ... } for(String str : list2) { ... } for(int index=0;index

例如

假设我们确定
list1.size()
等于
list2.size()
,如何在一个
语句中遍历这两个列表

可能类似于(字符串str1:list1,str2:list2)

使用基本循环

for(String str : list1) {
...
}

for(String str : list2) {
...
}
for(int index=0;index
增强的
for
循环不能同时遍历两个列表;您必须使用传统的
for
循环对其进行迭代:

for(int index=0; index < list1.size() ; index++){
  list1.get(index);
  list2.get(index);
}
for(int i=0;i
for(int i=0;i
您可以使用:

Iterator it1=list1.Iterator();
迭代器it2=list2.Iterator();
而(it1.hasNext()&&it2.hasNext()){..}
或:

for(迭代器it1=…it2..;it1.hasNext()&&it2.hasNext();){…}

正如您所说,两个列表的大小相同,那么您可以使用“for”循环而不是“for each”循环。您可以使用list的get(int-index)方法在每次迭代期间获取值。

如果有人感兴趣,这是一种解决方案,它将在两个列表中完全迭代,即使它们的大小不同

for(Iterator<String> it1 = ... it2..; it1.hasNext() && it2.hasNext();) {...} 
int max=Math.max(list1.size(),list2.size());

对于(int i=0;当列表的长度不同时,您希望发生什么?我认为在Java中没有人遇到过无限集合;)这是一个很好的解决方案,除了OP需要一个
for
statement.for(迭代器i1=one.Iterator(),i2=two.Iterator();i1.hasNext()&&i2.hasNext();){…}要完成:将其.next()添加到循环中,如果一个迭代器还有剩余项,则添加一条消息。为了安全起见,首选count代替list1.size(),并将count计算为Math.min(list1.size(),list2.size())。在使用
LinkedList
s时不应使用此方法。每次迭代,
get
方法将从列表的开始到当前元素进行迭代,这将导致O(n²)渐近性能。在使用链表时,强烈建议使用迭代器。为了安全起见,建议使用count代替list1.size(),并将count计算为Math.min(list1.size(),list2.size())。确实,这是避免出现
索引自动边界异常的一个好方法,但OP已经声明了一个先决条件是:“我们确信,
list1.size()
等于
list2.size()
”为了安全起见,我们已经选择使用count代替list1.size(),并将count计算为Math.min(list1.size(),list2.size())。
for(int i = 0; i< list1.size(); i++){
  String str1 = list1.get(i);
  String str2 = list2.get(i);
  //do stuff
}
Iterator<String> it1 = list1.iterator();
Iterator<String> it2 = list2.iterator();
while(it1.hasNext() && it2.hasNext()) { .. }
for(Iterator<String> it1 = ... it2..; it1.hasNext() && it2.hasNext();) {...} 
int max = Math.max(list1.size(), list2.size());
for(int i=0; i<max; ++i){
    if(list1.size()<i){
        list1.get(i);
    }
    if(list2.size()<i){
        list2.get(i);
    }
}
int index = 0;
for(String str1 : list1) {
    str2 = list2.get(index++);
}