在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损坏的数组差异的问题。