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