java - 如何从java中的另一个ArrayList中删除一个ArrayList的元素?

Posted

技术标签:

【中文标题】java - 如何从java中的另一个ArrayList中删除一个ArrayList的元素?【英文标题】:How can I delete an element of an ArrayList from another ArrayList in java? 【发布时间】:2021-05-15 11:43:10 【问题描述】:

我有两个 ArrayLists array1array2

在两个 ArrayList 中可以有不同的数字,但在 array2 中它总是只有一个数字。 在onClickListener 中,我需要从array1 中删除array2 的数量。

例如:

ArrayList array1 = new Arraylist(2,1,4,6,3);
ArrayList array2 = new Arraylist(1);

然后我尝试了:

array1.remove(array2)

但是什么也没发生……

实现这一目标的最佳方法是什么?

对于上下文:

我有三个片段,一个可以看到你的牌组DeckKartenFragment,两个可以选择你的卡片RadlerKarteHopfentrunkKarte。我有两个 ImageView,您可以在其中放置选择的卡片。

我希望每张卡片只能选择一次。为此,我制作了两个数组。一种是所有选择的卡片都是deck.deck(存储在类deck中),另一种是ImageView当前选择的卡片是deck1WelcheKarte


//Check if card is already chosen// 
if (deck.deck.contains(1) == true)
                        Toast.makeText(getActivity(), "example" , Toast.LENGTH_LONG).show();
                        deck.cardchosen.clear();
                    
if (deck.deck.contains(1) == false)
                        deck.deck.add(1);  //Add Card to deck//
                        deck.deck.removeAll(deck1WelcheKarte);  //Remove card that was chosen before from deck//
                        deck1WelcheKarte.clear(); //Reset card that is chosen to current card//
                        deck1WelcheKarte.add(1);

现在,如果我选择了我的第一张卡,一切正常,当我用一张新卡替换该卡时,它仍然可以正常工作。但是当我再次用我的第一张卡替换那张卡时,第一张卡的号码似乎仍在deck,因为我的应用程序转到 makeToast 而不是将新卡添加到卡组...

【问题讨论】:

removeAll 可以代替吗? 但是不是每个array1的数量都被删除了吗? 试过了,但仍然没有任何反应 这些是ArrayLists,我猜是不是数组。你提供一个最小的例子怎么样? 编辑过的例子 【参考方案1】:

按照上一个很好的答案,您必须更改 java.uti.ArrayList 的类型,因为 Java 集合不支持原始类型。 实际上,当您尝试将原始类型元素添加到 ArrayList 中时,该值会被其自身类型的 Object 类隐式包装,例如 这条语句array1.add(1); -> 与 -> array1.add(new Integer(1));相同

这里举个例子让你理解:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Test 

    public static void main(String[] args) 
        int myArray[] =  2, 1, 4, 6, 3 ;

        List<Integer> arrayList1 = new ArrayList();
        for (int elem : myArray) 
            arrayList1.add(elem);
        

        List<Integer> arrayList2 = new ArrayList();
        arrayList2.add(2);

        System.out.println("array of int: " + Arrays.toString(myArray));
        System.out.println("arrayList2 (List of " + arrayList2.get(0).getClass().getName() + " ): " + arrayList2);

        System.out.println("Before remove - arrayList1: " + arrayList1);

        for (Object a : arrayList2) 
            System.out.println("Removing element (type " + a.getClass().getName() + "): " + a);
            arrayList1.remove(a);
        

        System.out.println("After remove - arrayList1" + arrayList1);
    

输出是:

array of int: [2, 1, 4, 6, 3]
arrayList2 (List of java.lang.Integer ): [2]
Before remove - arrayList1: [2, 1, 4, 6, 3]
Removing element (type java.lang.Integer): 2
After remove - arrayList1[1, 4, 6, 3]

正如您从代码中看到的那样,我刚刚打印了当您将任何int 添加到 Object 的java.util.List 时使用的类的名称,它们实际上被 java.lang.Integer 类包装。

【讨论】:

【参考方案2】:

好的,然后试试这个代码并将其复制到你的:

public static void main(String[] args)
        ArrayList<Integer> a = new ArrayList<>(6);
        // ArrayList is kind of lacking right constructor so we have to insert values manually
        for(int i : new int[]1, 2, 3, 4, 5, 6) 
            a.add(i);
        

        ArrayList<Integer> b = new ArrayList<>(1);
        b.add(1);

        // integer is important if we use int, it will remove by index
        for(Integer i : b) 
            a.remove(i);
        

        System.out.println(a);
    

【讨论】:

谢谢,但由于它仍然不起作用,我认为错误在其他地方...... 是的,你必须坚强并找到它【参考方案3】:
for(int i : array2) 
    array1.remove(i)

这样你就不必检查array2是否包含任何元素,它也包含多个元素

【讨论】:

仍然不起作用,但我也不得不将 int 更改为 object 出于某种原因...

以上是关于java - 如何从java中的另一个ArrayList中删除一个ArrayList的元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Java 中的另一个线程更新 SWT GUI

如何使用java将数据从片段传递到android中的另一个片段?

从 Java 中的另一个类访问 berkeley db

从eclipse中的另一个java项目导入

如何从同一项目中的另一个类访问主类中的变量? [复制]

如何从 JavaFX 中的另一个控制器类访问 UI 元素?