如何比较Arraylist <integer>的元素

时间:2016-08-29 14:37:23

标签: java collections

我在下面编写代码来从Arraylist中获取重复元素。我的aerospikePID列表没有任何重复值,但是当我执行下面的代码时,它正在读取条件。

ArrayList<Integer> aerospikePIDs = new ArrayList<Integer>();    

ArrayList<Integer> duplicates = new ArrayList<Integer>();
    boolean flag;
    for(int j=0;j<aerospikePIDs.size();j++) {
        for(int k=1;k<aerospikePIDs.size();k++) {
            if(aerospikePIDs.get(j)==aerospikePIDs.get(k)) {
            duplicates.add(aerospikePIDs.get(k));
            flag=true;
            }
            if(flag=true)
System.out.println("duplicate elements for term " +searchTerm+duplicates);
    }   
                }

3 个答案:

答案 0 :(得分:2)

你的内循环应该从j + 1(而不是1)开始,否则当j = 1(j的第二次迭代),k = 1时(k的第一次迭代) j值等于1)。

aerospikePIDs.get(j)==aerospikePIDs.get(k) 

返回true

所以代码应该是:

ArrayList<Integer> aerospikePIDs = new ArrayList<Integer>();    

ArrayList<Integer> duplicates = new ArrayList<Integer>();

for (int j = 0; j < aerospikePIDs.size(); j++) {
    for (int k = j + 1; k < aerospikePIDs.size(); k++) {
        if (aerospikePIDs.get(j)==aerospikePIDs.get(k)) {
            duplicates.add(aerospikePIDs.get(k));
            System.out.println("duplicate elements for term " +searchTerm+duplicates);
        }
    }   
}

注意:标记不是必需的,因为如果你添加了一个副本,你可以直接在if中打印它,而无需定义新的不必要的变量和代码。

答案 1 :(得分:0)

使用更高级别的抽象:

  1. 将所有列表元素推送到Map<Integer, Integer> - 键是PID列表中的条目,值是计数器。相应的循环只是检查&#34;键存在?是 - 增加柜台;否则,使用计数器1和#34;添加密钥。
  2. 最后,您可以迭代该地图,并且每个条目都有一个计数器&gt; 1 ...在您的列表中有重复项;你甚至可以获得免费的重复数量。
  3. 问题/答案向您展示了做这些事情的好方法......几乎每天都会发布在这里。例如,你可以开始here;你只需要适应&#34; String&#34;关键是&#34;整数&#34;键。

    真的:在使用集合时,您的第一步始终是:找到最高级完成任务的方式 - 而不是坐下来编写像您这样容易出错的低级代码那样。

答案 2 :(得分:0)

您正在使用相同的arraylist进行迭代。您正在检查内部for循环中的每个数据,确保它将显示重复项。