参加OOP Java课程,因为我对这门语言完全陌生,并且还没有意识到它提供的许多工具,我发现自己在黑暗中摸索着解决简单的事情,我可以对这些问题进行硬编码但是我觉得用java.util
做更简单的方法。
假设我有一个字符串列表
String[] stringOne = {"a","b","c", "potato"};
String[] stringTwo = {"potato", "13"};
如何查看stringTwo
中stringOne
中任何特定项目的出现次数?或相反亦然。每当我遇到这个问题时,我宁愿不进行双循环(或者做一个双循环方法)。
现在我使用Collections.frequency()
并且只循环一次,但有更简单的方法吗?感谢。
答案 0 :(得分:3)
假设我有一个字符串列表
String[] stringOne = {"a","b","c", "potato"}; String[] stringTwo = {"potato", "13"};
这些是“数组”,而不是“列表”。 Arrays.asList(stringOne)
是stringOne
引用的数组的列表包装器。
如何在stringOne中查看stringTwo中任何给定项目的次数?
new HashSet(Arrays.asList(stringOne)).retainAll(Arrays.asList(stringTwo))
将为您提供两者中的元素集。
使用Bag
代替集合的类似方法会让您受到重视。
retainAll(Collection coll)
根据基数删除不在给定集合中的任何行李成员。也就是说,如果给定的集合coll包含给定对象的n个副本并且该包具有m> 1。 n份,然后从包中删除m-n份。此外,如果e是包中的对象
!coll.contains(e)
,则删除e
及其任何副本。
集合类中使用的等价概念是由Object.equals(object)
定义的,java.lang.String
覆盖了按字典顺序进行比较。
如果您需要在数组中返回结果,请尝试将内容转储为字符串的myBag.toArray(new String[0])
。该参数在文档中进行了解释,但简而言之,它是一个类型提示,可以解决Java破坏的数组差异。