【问题标题】:Finding duplicated values in array and remove both of them?在数组中查找重复值并删除它们?
【发布时间】:2021-06-04 17:19:51
【问题描述】:

好的,我知道 Set 以及如何从列表中删除重复的项目,

Set<Integer> setint = new LinkedHashSet<>();
for(int j=0;j<selectedList.size();j++){
    setint.add(selectedList.get(j));
}

但我需要删除它们。 例如,如果我有1,2,3,3,4,5,6,7,7,8,9 我需要的是找出重复的整数并删除这两个值。所以对于这个例子,我想删除 3 和 7,这样我就有了新数组 1,2,4,5,6,8,9

【问题讨论】:

  • 将所有值传递给哈希表/HashMap 并计算频率。如果频率大于 1。您遍历数组并删除所有值。
  • Frequency of element in array。您应该能够完成剩下的工作。

标签: java android arraylist


【解决方案1】:

逻辑

例如:ar=[1,2,3,3,4,5,6,7,7,8,9]

首先将重复值复制到另一个数组并删除它 现在你得到了ar_removed=[1,2,3,5,6,7,8,9]

这里有另一个数组 ar_dup=[3,7]

现在检查 ar_removedar_dup

您可以按条件删除ar_dup 值。结果ar_fi=[1,2,4,5,6,8,9]

可能会有所帮助!

【讨论】:

    【解决方案2】:

    您可以将重复项添加到Set,然后使用list.removeAll(set) 删除所有重复项

        ArrayList<Integer> list = new ArrayList<Integer>() {{
            add(1);
            add(2);
            add(3);
            add(3);
            add(4);
            add(5);
            add(6);
            add(7);
            add(7);
            add(7);
            add(8);
            add(9);
        }};
    
        // Sort the list to have adjacent duplicates 
        ArrayList<Integer> templist = new ArrayList<>(list);
        Collections.sort(templist);
    
        // Get the duplicate numbers
        Set<Integer> duplicates = new HashSet<>();
        for (int i = 0; i < templist.size() - 1; i++) {
            if (templist.get(i).equals(templist.get(i + 1)))
                duplicates.add(templist.get(i));
        }
    
        // Remove the duplicates
        Log.d("LOG_TAG", "onCreate: " + list);
        list.removeAll(duplicates);
        Log.d("LOG_TAG", "onCreate: " + list);
    

    结果:

    D/LOG_TAG: onCreate: [1, 2, 3, 3, 4, 5, 6, 7, 7, 7, 8, 9]
    D/LOG_TAG: onCreate: [1, 2, 4, 5, 6, 8, 9]
    

    【讨论】:

      猜你喜欢
      • 2010-10-19
      • 2016-01-10
      • 2015-07-03
      • 1970-01-01
      • 1970-01-01
      • 2014-12-27
      • 1970-01-01
      • 2020-06-01
      • 1970-01-01
      相关资源
      最近更新 更多