【问题标题】:How can I delete an element of an ArrayList from another ArrayList in java?java - 如何从java中的另一个ArrayList中删除一个ArrayList的元素?
【发布时间】: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,我猜是不是数组。你提供一个最小的例子怎么样?
  • 编辑过的例子

标签: java android arrays android-studio arraylist


【解决方案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 出于某种原因...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    相关资源
    最近更新 更多