如何检查两个对象是否包含相同的单词而不考虑顺序?
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
使用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<>();
}
将列表转换为字符串并比较字符串并不是一个好的方法。如果名称中包含空格、逗号或括号,您可能会遇到麻烦。最好保持字符串不同并按原样使用它们。
每当您想存储一堆项目并且项目的顺序无关紧要时,您应该考虑 "set" 而不是 "list"。集合是类似于列表的集合,但集合不保留顺序。
Set<String> names;
很棒的是您根本不需要 Name
class。 Set<String>
可以完全按照您对自定义 Name
class 的要求进行操作,而无需编写任何代码。您可以将名称添加到集合中,并且可以立即将集合与 equals()
进行比较。
public static boolean sameCoins(Set<String> n1, Set<String> n2) {
return n1.equals(n2);
}
最常见的具体 Set
实现是 HashSet
:
Set<String> names = new HashSet<>();
哈希集快速高效,但它有一个明显的缺点:它没有按顺序存储元素。如果您打印出散列集中的元素,它们看起来会有点随机。它们不是您像列表那样插入它们的顺序,也不是按字母顺序排列的。如果这很重要,您可以切换到 LinkedHashSet
(保留插入顺序)或 TreeSet
(对项目进行排序)。
所以我有两个对象,names1 和 names2,它们只是用户选择输入的一组名称。我想创建一个代码来检查两个对象是否包含相同的单词,而不考虑顺序。喜欢
Enter names ( n to stop):
John
Charles
n
Enter names (n to stop):
Charles
John
true
使用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<>();
}
将列表转换为字符串并比较字符串并不是一个好的方法。如果名称中包含空格、逗号或括号,您可能会遇到麻烦。最好保持字符串不同并按原样使用它们。
每当您想存储一堆项目并且项目的顺序无关紧要时,您应该考虑 "set" 而不是 "list"。集合是类似于列表的集合,但集合不保留顺序。
Set<String> names;
很棒的是您根本不需要 Name
class。 Set<String>
可以完全按照您对自定义 Name
class 的要求进行操作,而无需编写任何代码。您可以将名称添加到集合中,并且可以立即将集合与 equals()
进行比较。
public static boolean sameCoins(Set<String> n1, Set<String> n2) {
return n1.equals(n2);
}
最常见的具体 Set
实现是 HashSet
:
Set<String> names = new HashSet<>();
哈希集快速高效,但它有一个明显的缺点:它没有按顺序存储元素。如果您打印出散列集中的元素,它们看起来会有点随机。它们不是您像列表那样插入它们的顺序,也不是按字母顺序排列的。如果这很重要,您可以切换到 LinkedHashSet
(保留插入顺序)或 TreeSet
(对项目进行排序)。