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 array1
和 array2
。
在两个 ArrayList 中可以有不同的数字,但在 array2
中它总是只有一个数字。
在onClickListener
中,我需要从array1
中删除array2
的数量。
例如:
ArrayList array1 = new Arraylist(2,1,4,6,3);
ArrayList array2 = new Arraylist(1);
然后我尝试了:
array1.remove(array2)
但是什么也没发生……
实现这一目标的最佳方法是什么?
对于上下文:
我有三个片段,一个可以看到你的牌组DeckKartenFragment
,两个可以选择你的卡片RadlerKarte
和HopfentrunkKarte
。我有两个 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的数量都被删除了吗?
试过了,但仍然没有任何反应
这些是ArrayList
s,我猜是不是数组。你提供一个最小的例子怎么样?
编辑过的例子
【参考方案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的元素?的主要内容,如果未能解决你的问题,请参考以下文章