繁体   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