[英]How to check if two objects contain the same words regardless of order?
所以我有兩個對象,names1和names2,它們只是用戶選擇輸入的名稱數組。 我想創建一個代碼,檢查兩個對象是否包含相同的單詞,而不管順序如何。 喜歡
Enter names ( n to stop):
John
Charles
n
Enter names (n to stop):
Charles
John
true
將列表轉換為字符串並比較字符串不是一個好方法。 如果名稱包含空格,逗號或方括號,則可以進入熱水。 最好保持字符串不同並按原樣使用它們。
每當您要存儲一堆項目而項目的順序無關緊要時,您都應該考慮“設置”而不是“列表”。 集是類似於列表的集合,但是集不保留順序。
Set<String> names;
很棒的是,您根本不需要Name
類。 Set<String>
完全可以執行您要使用自定義Name
類進行的操作,而無需編寫任何代碼。 您可以將名稱添加到集合中,並且可以立即使用帶有equals()
集合進行比較。
public static boolean sameCoins(Set<String> n1, Set<String> n2) {
return n1.equals(n2);
}
最常見的具體Set
實現是HashSet
:
Set<String> names = new HashSet<>();
哈希集既快速又高效,但是它有一個明顯的缺點:它沒有按順序存儲元素。 如果您打印出哈希集中的元素,它們看起來將是隨機的。 它們既不是您插入列表的順序,也不是字母順序。 如果那很重要,則可以切換到LinkedHashSet
(保留插入順序)或TreeSet
(對項目進行排序)。
使用List.containsAll(Collection)
類的,
public boolean sameCoins(Name n) {
return name.size() == n.name.size() && name.containsAll(n.name);
}
另外,您的構造函數當前具有原始類型(請勿使用原始類型)。 並編程到List
界面。
private List<String> name;
public Name() {
name = new ArrayList<>();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.