java - 创建一个方法来搜索数组索引以查找重复值

标签 java arrays methods equals equality

我正在尝试编写一种方法,该方法将搜索名为“items”的数组的索引,以查看同一字符串是否包含在多个索引中(忽略大小写)。如果某个字符串在数组中多次出现,则该方法应输出一条消息并退出。就我现在所拥有的而言,循环有时有效,有时无效 - 例如,如果存储字符串“house”和“hOuse”,则它不会捕获它,尽管它应该捕获它。我一开始有休息时间;发现后=真;并认为删除它可能会有所帮助,但事实并非如此。有什么建议吗?

public void equals() {
    boolean found = false;
    for (int i = 0; i < items.length; i++) {
        for (int j = 1; j > i && j < items.length; j++) {
            if (items[i].equalsIgnoreCase(items[j])) {
                found = true;
            }
        }
    }
    if (found) {
        System.out.println("You listed the same item more than once.  Please restart and try again.");
        System.exit(0);
    }
}

最佳答案

这就是你的问题

    for (int i = 0; i < items.length; i++) {
        for (int j = 1; j > i && j < items.length; j++) {

更改为

    for (int i = 0; i < items.length; i++) {
        for (int j = i+1; j > i && j < items.length; j++) {

推理:如果 i 为 2 并且 j 为 1,则 j 立即不 > 1,并且内部循环立即返回。这显然不是您想要的,因为这意味着仅对数组中的第一个字符串进行比较。

当然,由于 j 现在总是 > i,我们可以放弃检查:

    for (int i = 0; i < items.length; i++) {
        for (int j = i+1; j < items.length; j++) {

好多了。

顺便说一下,通过将所有字符串添加到 HashSet<String> 中,您可以使算法变得非常快。 ( http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html ) 并检查 HashSet 的长度与原始集合的长度 - 如果它较低,则存在重复项。这将在 O(nlog(n)) 而不是 O(n^2) 中运行

关于java - 创建一个方法来搜索数组索引以查找重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15467161/

相关文章:

java - 如何解决另一个 promise 中的 promise ?

php - MongoDB 从集合中提取数组元素

Ruby:从哈希 A 到哈希 B 的最快路径

javascript - 如何在 JavaScript 中向自定义构造函数添加自定义方法?

java - setContentView 之前的代码麻烦

java - h :selectOneRadio HTML output for jsf 1. 1 对 2.0

c - 在 C 编程中声明一个没有 Size 的数组

java - 将一个对象的引用传递给另一个类中的另一个方法

C# 将任何方法作为参数传递

java - 试图在数据库中找到一个实体