簡體   English   中英

如何檢查兩個對象是否包含相同的單詞,而不管順序如何?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM