【问题标题】:Comparing object in array to everything else in same array将数组中的对象与同一数组中的其他所有对象进行比较
【发布时间】:2011-03-03 14:52:58
【问题描述】:

我想将数组中的每个项目与所述数组中的每个其他项目进行比较。我现在正在这样做,可以吗?还是有更漂亮/更快/更合乎逻辑的方法?

for(int i=0; i<array1.size(); i++){
  for(int j=0; j<array1.size(); j++){
    if(i!=j){
      ..do stuff..
    }
  }
}

【问题讨论】:

    标签: java arrays compare


    【解决方案1】:

    您进行了太多比较,而且您将每个项目都与自身进行了不必要的比较。你想要的是这样的:

    for(int i=0; i<array1.size(); i++){
      for(int j=i + 1; j<array1.size(); j++){
         if(arr[i] != arr[j]){
            ..do stuff..
         }
      }
    }
    

    (假设您的平等概念是commutative,通常是平等。)

    如果您的数组中有 N 个项目,那么您的原始 sn-p 将进行 N^2 比较,而我的 sn-p 将进行 N(N-1)/2 比较。

    【讨论】:

    • “if(i!=j){”条件是不必要的。 j 总是 > i。
    • 他不是从字面上比较 i 和 j,他的意思是比较数组中的那些对象。已经澄清了我的伪代码以表明这一点。
    【解决方案2】:

    如果你的比较关系是symmetrical,你可以取消

    for(int i = 0; i < array1.size(); i++) {
    
        // Note the initial value of j
        for(int j = i + 1; j < array1.size(); j++) {
            if (i != j) {
                ..do stuff..
            }
        }
    }
    

    另一种风格(减少缩进)是做

    for(int i = 0; i < array1.size(); i++) {
    
        // Note the initial value of j
        for(int j = i + 1; j < array1.size(); j++) {
            if (i == j)
                continue;
    
            ..do stuff..
        }
    }
    

    【讨论】:

      【解决方案3】:

      就速度而言,您可以循环直到j &lt; i 而不是内部子句中的整个数组,这应该涵盖您。

      例如,如果数组 = [1,2,3,4] 你会得到

      • 对于 1:不要比较。
      • 对于 2:与 1 比较。
      • 对于 3:比较 1 2。
      • 对于 4:比较 1 2 3。

      所以所有的都是比较的。

      【讨论】:

        【解决方案4】:

        我不明白为什么那行不通。

        虽然我一直认为你必须在数组上调用 .length(因为它是一个字段而不是一个方法)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多