【问题标题】:comparing an arrayList to itself将 arrayList 与自身进行比较
【发布时间】:2013-02-28 20:11:20
【问题描述】:

如果我有一个包含A,B,CarrayList(为简单起见)

我想将这些值与它们自己进行比较,而不与自身进行任何比较,也不将相同的两个值比较两次......

我该怎么做?

现在我有以下

for(Double db : arrayList)
{
    for(Double db2 : arrayList)
    {
        if(db2 != db)
        {
            //compare
        }
    }
}

但这并不能消除先将 A 与 B 进行比较,然后将 B 与 A 进行比较的情况......

有什么想法吗?

提前谢谢..

【问题讨论】:

    标签: java arrays arraylist


    【解决方案1】:

    听起来你可能只想通过 index 来代替:

    for (int i = 0; i < arrayList.size() - 1; i++) {
        Double db = arrayList.get(i);
        for (int j = i + 1; j < arrayList.size(); j++) {
            Double db2 = arrayList.get(j);
    
            // Don't use == unless you *really* want reference identity
            if (!db2.equals(db)) {
                ...
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      使用subList(int fromIndex, int toIndex):

      List<Double> arrayList = ...;
      int length = arrayList.size();
      
      for(int i = 0; i < length - 1; i++)
      {
          Double db1 = arrayList.get(i);
          for(Double db2 : arrayList.subList(i + 1, length))
          {
              // ...
          }
      }
      

      【讨论】:

      • 请注意,您可以在此处将i 的边界减一,因为最后一个元素没有可比较的内容。 (子列表将为空。)
      • @JonSkeet arrayList.subList(length, length) 不返回一个空列表,因此它不会进入内部循环吗?
      • 是的,但我的意思是你知道它会这样做 - 那么为什么还要进入 outer 循环,获取最后一个元素然后创建空子列表(视图)?
      猜你喜欢
      • 2014-12-07
      • 2013-01-05
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 2017-06-10
      • 2018-11-12
      • 1970-01-01
      相关资源
      最近更新 更多