在OOP Java上一门课,因为我是该语言的新手,并且还没有意识到它所提供的许多工具,所以我发现自己摸索着要解决简单的问题,因此我可以对这些问题进行硬编码,但是我感觉到了使用java.util进行此操作要简单得多。

假设我有一个字符串列表

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

如何检查stringTwo中的给定项目出现多少次?或相反亦然。我宁愿每次遇到此问题时都不要使用双循环(或使用双循环方法)。

现在,我不再使用stringOne并只循环一次,但是有没有更简单的方法?谢谢。

最佳答案

假设我有一个字符串列表

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

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

如何检查stringOne中任何给定项目出现在stringOne中多少次?
new HashSet(Arrays.asList(stringOne)).retainAll(Arrays.asList(stringTwo))

将为您提供这两种元素的集合。

Bag 代替集合的类似方法将使您计数。

retainAll(Collection coll)
考虑到基数,请移除包中未包含在给定集合中的所有成员。也就是说,如果给定的集合coll包含给定对象的n个副本,并且袋子的m> n个副本,则从袋子中删除m-n个副本。另外,如果e是包中的一个对象,但是!coll.contains(e),则删除e及其任何副本。

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

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

07-24 18:30
查看更多