2013-02-04 42 views
6

在OOP Java中學習一門課,由於我對這門語言完全陌生,至今尚未意識到它提供的許多工具,所以我發現自己在黑暗中摸索解決簡單問題的方法,但我可以硬編碼這些問題,但我覺得有很簡單的方法來做到這一點與java.util如何檢查兩個字符串反對海誓山盟?

假設我有一個字符串列表

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

如何檢查多少次stringTwo任何項目發生在stringOne?或相反亦然。每當我遇到這個問題時(或者做一個雙循環方法),我寧願不使用雙循環。

現在我脫身使用Collections.frequency(),只能循環一次,但有沒有更簡單的方法?謝謝。

回答

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)) 

會給你設定的兩個元素。

類似的方法與Bag而不是一組將得到你的數量。

retainAll(Collection coll)

刪除不屬於給定集合在包裏的任何成員,尊重基數。也就是說,如果給定collection coll包含給定對象的n個副本,並且該包具有m> n個副本,則從包中刪除m-n個副本。另外,如果e是袋子中的物品,但是!coll.contains(e),則刪除e及其任何副本。

在集合類使用等價的概念是,通過Object.equals(object)java.lang.String重寫定義爲按字典順序比較。

如果您需要返回數組結果,請嘗試使用myBag.toArray(new String[0])將內容轉儲爲字符串。文檔中解釋了參數,但簡而言之,它是一種適用於Java的數組差異的類型提示。

+0

啊謝謝你,更加優雅! – arynaq