所以我有两个对象,names1和names2,它们只是用户选择输入的名称数组。我想创建一个代码,检查两个对象是否包含相同的单词,而不管顺序如何。喜欢
Enter names ( n to stop):
John
Charles
n
Enter names (n to stop):
Charles
John
true
答案 0 :(得分:2)
将列表转换为字符串并比较字符串不是一个好方法。如果名称包含空格,逗号或方括号,则可以进入热水。最好保持字符串不同并按原样使用它们。
每当您要存储一堆项目而项目的顺序无关紧要时,您都应该考虑“设置”而不是“列表”。集合是类似于列表的集合,但是集合不会保留顺序。
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
(对项目进行排序)。
答案 1 :(得分:0)
使用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<>();
}