Java 确定嵌套Foreach循环中的当前对象是否相同
我试图确定嵌套在另一个foreach循环中的Java 确定嵌套Foreach循环中的当前对象是否相同,java,arraylist,foreach,comparison,equality,Java,Arraylist,Foreach,Comparison,Equality,我试图确定嵌套在另一个foreach循环中的foreach循环中的当前对象(它们都在相同的ArrayList上迭代)当前是否都在相同的对象上迭代。由于foreach循环的约定,似乎没有一种简单的方法来获取ArrayList中对象的当前索引,以便能够比较当前对象的相等性。本质上,如果两个foreach循环当前都在同一个对象上迭代,我希望在内部foreach循环中的当前对象上继续 例如,给定一个名为对象的数组列表: for (Object a : objects) { for (Objec
foreach
循环中的当前对象(它们都在相同的ArrayList
上迭代)当前是否都在相同的对象上迭代。由于foreach循环的约定,似乎没有一种简单的方法来获取ArrayList中对象的当前索引,以便能够比较当前对象的相等性。本质上,如果两个foreach循环当前都在同一个对象上迭代,我希望在内部foreach循环中的当前对象上继续
例如,给定一个名为对象的数组列表
:
for (Object a : objects) {
for (Object b : objects) {
//If both loops are currently iterating over the same object
//from the ArrayList objects, skip to the next iteration of the inner
//foreach loop
if (a == b) {
continue;
}
//If both foreach loops are not iterating over the same object
//execute some operation
}
}
是使用=
操作符来测试当前正在迭代的两个对象是否是同一个对象的可靠对象,还是简单地对循环使用常规,并根据它们的索引比较对象更好?在这种情况下,可以将对象与=
进行比较,但前提是您没有多次将同一对象放入列表中。如果列表中的多个位置上有相同的对象,则不允许这样做,您应该使用标准for循环。在这种情况下,可以将对象与=
进行比较,但前提是您没有多次将同一对象放入列表中。若列表中的多个位置上有相同的对象,则此操作不正确,应使用标准for循环。我将按照以下方式执行:
for (Object a : objects) {
for(int i = 0; i < objects.size(); i++) {
if(a.equals(objects.get(i)) {
continue;
}
}
}
用于(对象a:对象){
对于(int i=0;i
在我看来,这是最简单的方法。我会这样做:
for (Object a : objects) {
for(int i = 0; i < objects.size(); i++) {
if(a.equals(objects.get(i)) {
continue;
}
}
}
用于(对象a:对象){
对于(int i=0;i
在我看来,这是最简单的方法。如果将同一对象多次添加到数组列表中,=
相等性比较可能会产生不希望的结果。要检查您是否正在比较数组列表的相同索引项(即:您当前位于2D矩阵的对角线上)
考虑一下这一点:
Iterator<Object> outerIterator, innerIterator;
outerIterator = objects.iterator();
for (int i=0; outerIterator.hasNext(); ++i) {
a = outerIterator.next();
innerIterator = objects.iterator();
for(int j=0; innerIterator.hasNext(); ++j) {
b = innerIterator.next();
//comparing for elements for SAME index of iteration
//NOT comparing for element equality
if(i==j) { continue; }
// else do stuff with a & b
}
}
总结如下:
Iterator<Object> outerIterator, innerIterator;
outerIterator = objects.iterator();
for (int i=0; outerIterator.hasNext(); ++i) {
a = outerIterator.next();
innerIterator = objects.iterator();
for(int j=0; innerIterator.hasNext(); ++j) {
b = innerIterator.next();
//comparing for elements for SAME index of iteration
//NOT comparing for element equality
if(i==j) { continue; }
// else do stuff with a & b
}
}
如果要检查浅层相等,请使用a==b
如果要检查深度相等,请使用a.equals(b)
如果要检查索引相等性,请使用i==j
如果将同一对象多次添加到ArrayList
中,则=
相等性比较可能会产生不期望的结果。要检查是否正在比较ArrayList的相同索引项
(即:您当前位于2D矩阵的对角线上)
考虑一下这一点:
Iterator<Object> outerIterator, innerIterator;
outerIterator = objects.iterator();
for (int i=0; outerIterator.hasNext(); ++i) {
a = outerIterator.next();
innerIterator = objects.iterator();
for(int j=0; innerIterator.hasNext(); ++j) {
b = innerIterator.next();
//comparing for elements for SAME index of iteration
//NOT comparing for element equality
if(i==j) { continue; }
// else do stuff with a & b
}
}
总结如下:
Iterator<Object> outerIterator, innerIterator;
outerIterator = objects.iterator();
for (int i=0; outerIterator.hasNext(); ++i) {
a = outerIterator.next();
innerIterator = objects.iterator();
for(int j=0; innerIterator.hasNext(); ++j) {
b = innerIterator.next();
//comparing for elements for SAME index of iteration
//NOT comparing for element equality
if(i==j) { continue; }
// else do stuff with a & b
}
}
如果要检查浅层相等,请使用a==b
如果要检查深度相等,请使用a.equals(b)
如果要检查索引是否相等,请使用i==j
如何使用迭代器来比较框的索引?如何使用迭代器来比较框的索引?啊,这是一个有趣的问题!即使对象多次出现在列表中,是否有任何方法可以可靠地比较对象?不,我没有我也不会使用equals
,因为如果对象按数据相等(如果实现为那样工作),它可以返回true我认为你不想这样做。例如,如果你有两个值相同的字符串,这是两个对象,但等于将返回true!好的!谢谢你的帮助!@KevinGurney查看我的答案,找到一种可靠地比较对象的方法,即使对象多次出现在列表中。啊,这是一个有趣的点!有什么方法可以比较吗即使对象多次出现在列表中,对象也是可靠的?不,我认为不是。我也不会使用equals
,因为如果对象按数据相等,它可以返回true(如果它实现为那样工作)我认为你不想这样做。例如,如果你有两个值相同的字符串,这是两个对象,但等于将返回true!好的!谢谢你的帮助!@KevinGurney查看我的答案,以找到一种可靠地比较对象的方法,即使对象多次出现在列表中。我正在考虑这样做,但是否有替代方法允许使用foreach循环的ve方法?我想不出来。您想使用foreach
循环有什么具体原因吗?我个人不太喜欢它们。我想主要是因为foreach循环似乎比常规for循环更符合面向对象的实践。但是,我认为sa只需使用for循环就可以完成这件事,实现上的差异可以忽略不计。foreach
循环专门用于面向对象的循环是的,但是如果感觉到它更容易阅读和看到过程的完成。foreach
循环确实有它们的好处,但最终我觉得这是一个意见问题,如果您需要时间或代码长度。我曾考虑过这样做,但有没有其他方法可以允许使用foreach循环?我想不出来。您希望使用foreach
循环的具体原因是什么?我个人并不非常喜欢它们。嗯,我想主要是因为foreach循环似乎比常规for循环更接近于面向对象的实践。然而,我认为同样的事情也可以通过使用for循环来完成,实现上的差异可以忽略不计。foreach
循环是专为面向对象的循环设计的是的,但如果你觉得它只是易读