首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >比较没有冗余的相同列表

比较没有冗余的相同列表
EN

Stack Overflow用户
提问于 2015-03-17 17:16:01
回答 3查看 89关注 0票数 1

我有这个密码

代码语言:javascript
运行
复制
public void update(List<GameObject> objects) {
        for (GameObject object1 :objects){
        for (GameObject object2 : objects){
            if (!object1.equals(object2)) object1.collisionHandling(object2);
        }
    }

我需要比较所有的项目,但我显然不想比较每个列表项目本身;所以第1项和第1项,我也不想比较项目2和3,然后在下一个循环3和2,等等。大多数例子使用编号数组(i=0,i<5,i++),但我有一个列表。我将如何提高这段代码的效率?

编辑:我现在可以忽略循环中相同的项目,只需要停止对称的比较。2-3,3-2等

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-17 17:52:54

进行这种三角比较的标准方法是:

代码语言:javascript
运行
复制
for (int indexI = 0; indexI < objects.size(); indexI++) {
    GameObject object1 = objects.get(indexI);
    for (int indexJ = indexI + 1; indexJ < objects.size(); indexJ++) {
       GameObject object2 = objects.get(indexJ);
       object1.collisionHandling(object2);
    }
}

注意,indexJ从indexI +1到size()。

票数 3
EN

Stack Overflow用户

发布于 2015-03-17 18:19:54

您可以使用Java 8流,甚至可以考虑并行流。

要求您在GameObject中实现可比较的接口。

代码语言:javascript
运行
复制
public void update(List<GameObject> objects) {
    objects.parallelStream().forEach(
        object1 -> objects.parallelStream().filter(
            object2 -> object1 != object2 && object1.compareTo(object2) < 0
        ).forEach(
            object2 -> object1.collisionHandling(object2)
        )
    );
}

产出如下:

代码语言:javascript
运行
复制
3 collision 4
2 collision 3
2 collision 4
0 collision 3
0 collision 2
1 collision 2
1 collision 4
1 collision 3
0 collision 1
0 collision 4

或者当使用流代替parallelStream时:

代码语言:javascript
运行
复制
0 collision 1
0 collision 2
0 collision 3
0 collision 4
1 collision 2
1 collision 3
1 collision 4
2 collision 3
2 collision 4
3 collision 4
票数 0
EN

Stack Overflow用户

发布于 2015-03-17 18:30:47

如果没有Java8,您只需在Comparable中实现GameObject接口,并使用以下代码:

代码语言:javascript
运行
复制
public void update(List<GameObject> objects) {
    for(GameObject object1 : objects) {
        for(GameObject object2 : objects) {
            if(object1 != object2 && object1.compareTo(object2) < 0) {
                object1.collisionHandling(object2);
            }
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29105555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档