【问题标题】:How to compare two arraylist elements using java [duplicate]如何使用java比较两个arraylist元素[重复]
【发布时间】:2017-07-17 12:06:19
【问题描述】:

我正在尝试创建一种方法来比较两个 arraylist buttonresourceIds & buttonresourceIds2 。我想比较它们以了解它们是否共享按钮元素。然后返回他们共享的元素的“数量”。

ArrayList<String>> buttonresourceIds = new ArrayList<String>>();
ArrayList<String>> buttonresourceIds2 = new ArrayList<String>>();

for(int i=0;i<buttonresourceIds.size();i++){

    for(int j=0;j<buttonresourceIds2.size();j++){
        if(buttonresourceIds.contains(buttonresourceIds2.get(j))){
            System.out.println("Exist : "+buttonresourceIds2.get(j));
        }else{
            System.out.println("Not Exist : "+buttonresourceIds2.get(j));
        }
    }
}

它给了我结果,但循环不断重复。我错过了什么吗?

【问题讨论】:

  • List::retainAll怎么样?
  • 这段代码没有任何作用。您的错误在其他地方。
  • 既然你打电话给buttonresourceIds.contains(buttonresourceIds2.get(j)) 那个带有i 的外循环是干什么用的?这可能是您的问题:您正在检查列表 2 和列表 1 对于列表 1 中的每个元素。另请注意,您的代码无法按原样编译(例如,ArrayList&lt;String&gt;&gt; 无效)并且您之前发布的 hashmap 代码看起来也很奇怪。
  • @Tom 不,这不是重复的。 它给了我结果,但 循环不断重复。
  • @ChristopherSchneider 修复错误代码而不是首先使用正确方法的重点在哪里?这显然是一个骗局(因为这个问题告诉 OP 他/她想知道什么)。

标签: java for-loop arraylist


【解决方案1】:

你不需要两个循环来做这个,一个循环就足够了

ArrayList<String>> buttonresourceIds = new ArrayList<String>>();
ArrayList<String>> buttonresourceIds2 = new ArrayList<String>>();
int common=0;
for(int j=0;j<buttonresourceIds2.size();j++){
    if(buttonresourceIds.contains(buttonresourceIds2.get(j))){
        System.out.println("Exist : "+buttonresourceIds2.get(j));
        common++;
    }else{
        System.out.println("Not Exist : "+buttonresourceIds2.get(j));
    }
}
return common;

【讨论】:

  • 如果您满意,请接受我的解决方案。
【解决方案2】:

见下面的代码:

ArrayList<String>> buttonresourceIds = new ArrayList<String>>();
ArrayList<String>> buttonresourceIds2 = new ArrayList<String>>();


for(int i=0;i<buttonresourceIds.size();i++){
if(buttonresourceIds2.contains(buttonresourceIds.get(i)))
{
     System.out.println("Exist : "+buttonresourceIds.get(i));
}
else{
      System.out.println("Not Exist : "+buttonresourceIds.get(i));
    }

 }

在上面的代码中,只需要一个循环。

【讨论】:

  • 这似乎有效。谢谢
【解决方案3】:

首先,您的代码中存在一些错误,例如:

ArrayList<String>> --> ArrayList<String>

正如其他答案所说:一个循环很有用,但调用 get() 2 次的成本超过 1,因此您可以使用下面的 foreach 功能:

for (String button : buttonresourceIds2) {
     if (buttonresourceIds.contains(button)) {
         System.out.println("Exist : " + button);
         elementInCommon++;
     } else {
         System.out.println("Not Exist : " + button);
     }
}

之后你想计算共同的元素,所以你需要添加一个变量,如果包含则自增


2 行更简单的方法 是:

buttonresourceIds.retainAll(buttonresourceIds2);
int elementInCommom = buttonresourceIds.size();

【讨论】:

    【解决方案4】:
    public static void main(String[] args) {
            ArrayList<String> buttonresourceIds = new ArrayList<String>();
            ArrayList<String> buttonresourceIds2 = new ArrayList<String>();
            buttonresourceIds.add("1");
            buttonresourceIds.add("2");
            buttonresourceIds.add("3");
    
            buttonresourceIds2.add("1");
            buttonresourceIds2.add("2");
            buttonresourceIds2.add("4");
    
    
                for(int i=0;i<buttonresourceIds.size();i++){
    
                    for(int j=i;j<buttonresourceIds2.size();j++){
                    if(buttonresourceIds.contains(buttonresourceIds2.get(j))){
                        System.out.println("Exist : "+buttonresourceIds2.get(j));
                    }else{
                        System.out.println("Not Exist : "+buttonresourceIds2.get(j));
                    }
                    break;
                }
                }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-04
      • 2016-05-25
      • 1970-01-01
      • 2017-01-24
      • 2011-01-25
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      相关资源
      最近更新 更多