Java 使用containsAll()比较两个ArrayList

Java 使用containsAll()比较两个ArrayList,java,arraylist,contains,Java,Arraylist,Contains,有人能帮我吗 我有两个数组列表 array1包含: [3个鳄梨,3个西红柿,1茶匙盐,1/2杯洋葱丁] array2包含: [鳄梨、西红柿] 我试图使用array1.containsAll(array2)但它返回false,因为array1中鳄梨和西红柿前面有“3” 谢谢大家! containsAll()使用equals()方法检查对象是否相等 如果要比较这样的字符串,应该使用String#contains方法和一些循环 或者,您可以使用description和quantity属性创建自己的类,

有人能帮我吗

我有两个数组列表

array1
包含:

[3个鳄梨,3个西红柿,1茶匙盐,1/2杯洋葱丁]

array2
包含:

[鳄梨、西红柿]

我试图使用
array1.containsAll(array2)
但它返回
false
,因为
array1中鳄梨和西红柿前面有“3”

谢谢大家!

containsAll()使用equals()方法检查对象是否相等

如果要比较这样的字符串,应该使用String#contains方法和一些循环

或者,您可以使用description和quantity属性创建自己的类,并覆盖equals()方法

这取决于你想做什么

我建议你改用a。HashMaps包含一组键和值,而不是像数组列表那样的一个值。在这种情况下,您应该将配料名称作为键,并将数量作为值。然而,HashMap并没有containsAll方法,但您可以获得一组键(成分),然后调用

HashMap array1=newhashmap();
ArrayList array2=新的ArrayList();
数组1.put(“鳄梨”,3);
排列1.放置(“西红柿”,3);
//等等。
array1.keySet().containsAll(array2);

好的,您希望它做什么?为什么它不是一个
Map
?提示:一对嵌套for循环和一对pass/fail/bail标志可以完成任务。这就是Guava
Multiset
s的用途。尽管经过再三考虑,不是为了1/2杯的东西。你可以做
array1.keySet().containsAll(array2)
,但是,你也应该将
array1
重命名为
recipe
或其他什么东西。@rolfl非常正确。我忘了
Set
有一个
containsAll
。我只是让变量名保持不变,试图弄清楚,但命名一个映射数组1确实让人觉得奇怪。再想想,如果你不希望所有的数量都是数字(1/2杯),那么使用
HashMap
可能会更好。同样的概念。谢谢你推荐HashMap。最后一个问题!我不想手动添加array1.put(鳄梨)、array1.put(西红柿)等。我想循环它,这样我就可以输入n个键和值。有没有一种方法可以将原始数组1中的字符串和整数解析到HashMap中?您是如何填充原始的
ArrayList
?你也可以用同样的方法。
HashMap<String, Integer> array1 = new HashMap<String, Integer>();
ArrayList<String> array2 = new ArrayList<String>();
array1.put("Avocados", 3);
array1.put("Tomatoes", 3);
//etc.
array1.keySet().containsAll(array2);