【问题标题】:find duplicate words in java array and return array with unique duplicate words - use method在java数组中查找重复单词并返回具有唯一重复单词的数组 - 使用方法
【发布时间】:2012-12-05 04:15:49
【问题描述】:

我是 java 新手,对这个问题感到困惑。 这就是我到目前为止提出的。 我还在努力中,如果有任何进展,我会在这里发布。

public class charArray {

public static void main(String[] args) {

    String[] strArray = new String[] {"apple", "ball", "cat", "apple", "ball", "apple"};
    //output should be ["apple", "ball"]

    checkDuplicate(strArray);
}
public static String[] checkDuplicate(String[] strArray){
    String[] newArray = new String[]{};
    for(int i = 0; i < strArray.length; i++){

        for(int j = 0; j < i; j++){
            if (strArray[i].equals(srtArray[j])){
                newArray = strArray[i];
            }
        }

    }
    return newArray[];

}

}


新进展: 好的,我平庸的头脑已经走到了这一步:(并且解决方案有效) 它打印出 Duplicate 元素的唯一数组。 但是现在我需要通过调用一个方法来实现相同的代码。 任何帮助表示赞赏。

import java.util.*;

public class setChar {

public static void main(String[] args) {
    String[] strArray = new String[] {"apple", "ball", "cat", "apple", "ball", "apple"};
    Set set = new HashSet();
    Set uniqueSet = new HashSet();
    for(int i = 0; i < strArray.length ; i++ ){
        boolean b = set.add(strArray[i]);
        if(b == false){
            uniqueSet.add(strArray[i]);
        }
    }
    Iterator it = uniqueSet.iterator();
    while (it.hasNext()){
        System.out.println(it.next());
    }
}

}

输出是: 球 苹果


最终用方法实现,具有正确的返回类型。 请让我知道,如果这可以进一步优化。 谢谢大家的建议。这是工作代码:

public class retUnique {

public static void main(String[] args) {
    String[] strArray = new String[] {"apple", "ball", "cat", "apple", "ball", "apple"};

    System.out.println(printUnique(strArray));
}

public static Set<String> printUnique(String[] strArray){
    Set<String> set = new HashSet<String>();
    Set<String> uniqueSet = new HashSet<String>();
    for(int i = 0; i < strArray.length ; i++ ){
        boolean b = set.add(strArray[i]);
        if(b == false){
            uniqueSet.add(strArray[i]);
        }
    }
    return(uniqueSet);
}

}

【问题讨论】:

  • 可以尝试使用 LinkedHashSet(我相信是这样吗?),即使您添加多个相同的条目,它也只允许唯一的条目。
  • 你希望 ro 返回什么,唯一的词,还是重复的?
  • AlexWien - 我必须只返回重复单词的唯一单词。
  • 这里可能已经回答了stackoverflow.com/questions/13337296/…
  • 感谢李的链接。但问题不一样。在您发布的链接上,正在整理列表的独特元素。但就我而言,我需要一个独特的元素列表,即重复。并非列表中的所有元素。好吧,我已经发布了一个解决方案,请看看是否可以对其进行优化,并在方法中实现。

标签: java arrays duplicates


【解决方案1】:

一个简单的选择是使用Set like container 而不是数组。它将自动确保仅存在唯一值。

您可以查看TreeSetHashSet 的示例。

【讨论】:

  • 好的.. 我现在正在查看文档。但我的 java/编程技能非常初级。
  • 感谢您的建议。我使用了 HashSet 并想出了一个解决方案。请检查是否可以优化。我已经编辑了问题部分并在那里添加了解决方案。
  • @avas,我建议你看看 aug here 的答案。您不需要 2 套,因为到最后,两套将是相同的,set.add(strArray[i]); 本身将确保 set 只有唯一的字符串
  • 您也可以使用函数Set::addAll 或构造函数本身将所有字符串添加到集合中而不是迭代。
  • Karthik,感谢您的建议。我可能没有说清楚,我需要的是“重复项”的唯一列表,而不仅仅是所有元素的唯一列表。这就是我使用两组的原因。我看不出只用一套是怎么做到的。
【解决方案2】:

要检测重复项,如果这是您的问题,请将数组的所有元素添加到集合中,如果 set.add() 返回 false,则它是重复项,因此您可以将此元素添加到重复项的结果列表中.
或者,如果您的问题是要返回没有重复的值,那么您可以在返回之前将集合返回,或将集合转换为列表。

【讨论】:

  • 感谢 AlexWien,帮了大忙。我用逻辑来解决问题。
  • @jumbo 很好,一旦你有超过 15 分,别忘了点赞。
【解决方案3】:

我相信这样的事情应该会奏效。自从我用 Java 编码以来已经有一段时间了,所以如果有人想进行编辑,请做。

public String[] returnDups(String[] strArray) {
    Set<String> set = new HashSet<String>(strArray);
    return set.toArray(new String[0]);
}

但是大家一直在建议的是正确的想法。集合使删除重复项变得非常容易,因此您应该利用它们。我们不要重新发明轮子。

【讨论】:

    猜你喜欢
    • 2020-07-16
    • 2018-12-13
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2021-12-11
    • 2017-11-13
    • 1970-01-01
    相关资源
    最近更新 更多