android - 比较两个数组列表元素并获取不常见的元素

标签 android arraylist compare

  • 我做过这样的事情:

    public class MainActivity extends AppCompatActivity {
    
        ArrayList<String> al = new ArrayList<String>();
        ArrayList<String> a2 = new ArrayList<String>();
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
    
            al.add("C");
            al.add("A");
            al.add("E");
            al.add("B");
            al.add("D");
            al.add("F");
    
            a2.add("C");
            a2.add("C");
            a2.add("E");
            a2.add("B");
            a2.add("D");
            a2.add("F");
    
    
            for (int i = 0; i < al.size(); i++) {
                for (int j = 0; j < a2.size(); j++) {
    
                    if (al.get(i).equals(a2.get(j))) {
                        a2.remove(j);
                        Log.e("array 2 ", a2.toString());
                        break;
                    }
    
                }
            }
         } 
      }
    

-- 但我的输出是这样的:

[C, E, B, D, F]
[C, B, D, F]
[C, D, F]
[C, F]
[C]

-- 我在 arraylist 2 中具有相同的元素,然后我也得到“C”,它应该为 null。即零非常见值。

最佳答案

当您直接在 for 循环内删除 a2 项时,您会弄乱索引。引用我下面的解决方案

        ArrayList<String> al = new ArrayList<>();
        ArrayList<String> a2 = new ArrayList<>();
        al.add("C");
        al.add("A");
        al.add("E");
        al.add("B");
        al.add("D");
        al.add("F");

        a2.add("C");
        a2.add("C");
        a2.add("E");
        a2.add("B");
        a2.add("D");
        a2.add("F");

        ArrayList<String> tempToDelete = new ArrayList<>();

        for (int i = 0; i < al.size(); i++) {
            for (int j = 0; j < a2.size(); j++) {
                if (al.get(i).equals(a2.get(j))) {
                    tempToDelete.add(a2.get(j));
                    break;
                }

            }
        }

        a2.removeAll(tempToDelete);

对于更短的方法,你可以这样做:

a2.removeAll(al);

关于android - 比较两个数组列表元素并获取不常见的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36281136/

相关文章:

java - ArrayList 还是几个 for 循环?

powershell - 如何在将两个哈希表与 Powershell 进行比较时选择特定的哈希表键和值?

java - 使用 printf() java 比较 2 个数字

java - 动态添加 View 到RelativeLayout不起作用

android - 在 Android 上使用 FileOutputStream 创建的文件在哪里?

java 从点数组列表中绘制折线

java - 在泛型类中实现数组列表的 Add 方法

android - 错误-从 Android Webview 中的 URL 加载 PDF

android - 为什么 Google 不提供 float 操作按钮小部件?

比较 2 个 double 但没有 C 上的所有数字