java - 集合 addAll 方法用于一组唯一值

标签 java collections time-complexity

我正在尝试查找字符串中唯一字符的数量。解决方案必须尽可能高效(时间复杂度 O(N);非常大的数组;一般来说是大 O)。我决定这样做(如果您有更好的解决方案请告诉我)。唯一的问题是,当我尝试运行它时,它总是说只有一个不同的值。 Collections.addAll 方法似乎有问题(也许我使用错误)。请让我知道如何解决它。看起来它只取数组中的第一个字符。谢谢。

    String ds = "acvdgefav";
    char[] sa = ds.toCharArray();   

    for (int i=0; i<sa.length; i++)
        System.out.println(sa[i]);
    System.out.println();
    System.out.println(sa.length);
    System.out.println();

    HashSet hs = new HashSet();
    Collections.addAll(hs, sa);
    for (int i=0; i<hs.size(); i++)
        System.out.println(sa[i]);
    System.out.println();
    int z = hs.size();
    System.out.println(z);

最佳答案

我建议您使用泛型,因为它会发现代码中的错误,就像使用调试器单步调试代码一样。

最有效的方法是使用 BitSet。这可能比使用 HashSet 快 10 倍,但时间复杂度相同。

关于java - 集合 addAll 方法用于一组唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9956778/

相关文章:

algorithm - 两个二叉搜索树的简单合并的时间复杂度

java - 如何检查 JOptionPane 是否可见?

java - 子类可以修改 Java 中抽象父类(super class)中静态方法的行为吗?

c# - 每次将项目添加到集合时执行一个方法

java - 按值对并发映射条目进行排序

java - 迭代器和枚举的区别

algorithm - 迷宫程序时间复杂度

java - Akka/futures——Akka 是否使用当前线程或调度程序来决定它是 "worth"?

Java 从不同的类中普遍加载整数

sorting - 时间复杂度: Insertion sort with unique key