6

在 OOP Java 中上一堂课,由于我对这门语言完全陌生,并且还不知道它必须提供的许多工具,我发现自己在黑暗中摸索解决简单问题的方法,我可以硬编码这些问题,但我觉得在那里是更简单的方法来做到这一点java.util

假设我有一个字符串列表

String[] stringOne = {"a","b","c", "potato"};
String[] stringTwo = {"potato", "13"};

如何检查任何给定项目stringTwo出现的次数stringOne?或相反亦然。我宁愿每次遇到这个问题时都不要双循环(或制作双循环方法)。

现在我可以使用Collections.frequency()并且只循环一次,但有没有更简单的方法?谢谢。

4

1 回答 1

3

假设我有一个字符串列表

String[] stringOne = {"a","b","c", "potato"};
String[] stringTwo = {"potato", "13"};

这些是“数组”,而不是“列表”。 Arrays.asList(stringOne)是 . 引用的数组的列表包装器stringOne

如何检查 stringTwo 中任何给定项目在 stringOne 中出现的次数?

new HashSet(Arrays.asList(stringOne)).retainAll(Arrays.asList(stringTwo))

将为您提供两者中的元素集。

使用 aBag而不是 set 的类似方法将使您计数。

retainAll(Collection coll)

删除不在给定集合中的任何袋子成员,尊重基数。也就是说,如果给定的集合 coll 包含给定对象的 n 个副本,并且包有 m > n 个副本,则从包中删除 m - n 个副本。此外,如果 e 是 bag but 中的一个对象!coll.contains(e),则删除e它的任何副本。

集合类中使用的等价概念是由Object.equals(object)哪些java.lang.String覆盖定义的,以按字典顺序进行比较。

如果您需要将结果返回到数组中,请尝试myBag.toArray(new String[0])将内容转储到字符串中。该参数在文档中进行了解释,但简而言之,它是一种类型提示,适用于 Java 的损坏数组方差。

于 2013-02-04T19:51:44.417 回答