Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 集合为一组唯一值添加所有方法_Java_Collections_Time Complexity - Fatal编程技术网

Java 集合为一组唯一值添加所有方法

Java 集合为一组唯一值添加所有方法,java,collections,time-complexity,Java,Collections,Time Complexity,我正在尝试查找字符串中唯一字符的数量。解决方案必须尽可能高效(时间复杂度O(N);非常大的阵列;通常是大O)。我决定这样做(如果你有更好的解决方案,请让我知道)。唯一的问题是,当我尝试运行它时,它总是说只有一个不同的值。似乎Collections.addAll方法有问题(可能我用错了)。请让我知道如何修理它。似乎它只是获取数组中的第一个字符。多谢各位 String ds = "acvdgefav"; char[] sa = ds.toCharArray(); fo

我正在尝试查找字符串中唯一字符的数量。解决方案必须尽可能高效(时间复杂度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);
String ds=“acvdgefav”;
char[]sa=ds.toCharArray();

对于(int i=0;i我认为这样使用
Collections.addAll
只需将数组本身添加到集合中,而不是其字符。另请参见

基本上,采用泛型数组的变量参数方法最终会得到一个
对象…
,实现为
对象[]
,它与
int[]
不兼容,因此
int[]
会被装箱

此外,这:

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

for(int i=0;i我认为这样使用
Collections.addAll
只会将数组本身添加到集合中,而不是其字符。另请参见

基本上,采用泛型数组的变量参数方法最终会得到一个
对象…
,实现为
对象[]
,它与
int[]
不兼容,因此
int[]
会被装箱

此外,这:

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

for(inti=0;i我建议您使用泛型,因为它会发现代码中的错误,就像使用调试器逐步检查代码一样


最有效的方法是使用位集。这可能比使用哈希集快10倍,但具有相同的时间复杂性。

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


最有效的方法是使用位集。这可能比使用哈希集快10倍,但具有相同的时间复杂性。

请更具体地说明如何将位集与此代码一起使用。我尝试了泛型,但在尝试将哈希集放入位集时,addAll方法被拒绝。
for(int I=0;I
请更具体地说明如何将bitSet与此代码一起使用。我尝试了泛型,但在尝试将HashSet放入时addAll方法被拒绝。
for(int i=0;i
我试图做的是使用集合规范(没有重复的元素),简单地将数组中的所有元素添加到集合中(不会添加重复的元素),因此简言之,只有不同的值存在。然后使用size()我就知道了。关于行(复制粘贴eh)迭代器I=hs.Iterator(),您是对的(i.hasNext())System.out.println(i.next());但随后它返回一些不相关的值。我检查了Collections.addAll()和Arrays.asList()两个集合。asList()只认为这种方法会更有效。对于
Arrays.asList
,我认为同样的情况也会发生。然后我需要降级;)我试着使用集合规范(没有重复的元素),简单地将数组中的所有元素添加到集合中(不会添加重复的元素),因此简言之,只有不同的值存在。然后使用size()我就知道了。关于行(复制粘贴eh)迭代器I=hs.Iterator();while(I.hasNext())你是对的System.out.println(i.next());但随后它返回一些不相关的值。我检查了Collections.addAll()和Arrays。asList()只认为这种方法会更有效。关于
数组,asList是错误的,我认为同样的情况也会发生。然后我需要降级;)
for (int i=0; i<hs.size(); i++)
     System.out.println(sa[i]);