好的,這是我的問題。我必須HashSet
's,我使用removeAll
方法刪除一組中存在的值。集合removeAll忽略大小寫?
在調用該方法之前,我明顯將這些值添加到Set
s。在添加之前,我在每個String
上呼叫.toUpperCase()
,因爲這兩個列表中的值都是不同的情況。這個案件沒有韻律或理由。
有一次,我打電話給removeAll
,我需要返回Set
中剩下的值。有沒有一種有效的方式做到這一點,而無需運行原始列表並使用CompareToIgnoreCase
?
實施例:
的List1:
"BOB"
"Joe"
"john"
"MARK"
"dave"
"Bill"
列表2:
"JOE"
"MARK"
"DAVE"
在此之後,對於使用toUpperCase()
上String
s各自列表創建一個單獨的HashSet
。然後致電removeAll
。
Set1.removeAll(set2);
Set1:
"BOB"
"JOHN"
"BILL"
我需要在列表中再次像這樣:
"BOB"
"john"
"Bill"
任何想法,將不勝感激。我知道這是窮人,應該有一個原始列表的標準,但這不是我決定的。
無需滾動您自己的比較器。 String類爲您提供了一個:http://java.sun.com/javase/6/docs/api/java/lang/String.html#CASE_INSENSITIVE_ORDER – banjollity 2009-08-06 22:04:33
@bankollity。謝謝! - 從Java 1.2開始就一直存在,我從未注意到它。代碼修改。 – McDowell 2009-08-07 09:13:04
哇,這是非常簡單的實現,雖然文檔導致你相信比較器僅用於排序。 TreeSet(Comparator c):構造一個新的空集,按照指定的比較器進行排序。 http://java.sun.com/j2se/1.4.2/docs/api/java/util/TreeSet.html#TreeSet%28java.util.Comparator%29。我很高興它的工作,但非常感謝你的迴應! – user84786 2009-08-07 13:42:19