知道字符集中是否存在字母的最快方法是什么

时间:2011-05-18 07:05:53

标签: java

  1. 我应该使用“A”,新字符(“A”)
  2. 之类的东西来定义哈希映射
  3. 我应该使用排序列表之类的东西吗?或者把它投成一个int?
  4. 简单清单? (这看起来效率不高)
  5. 我需要快速检索 - 当我询问Char是否存在时。 增加时间几乎不重要。

4 个答案:

答案 0 :(得分:1)

正如我们所说的Collection:它取决于集合类型HashSetcontains操作提供了最佳性能,即O(1)。

Set<Character> chars = new HashSet<Character>();
chars.add(new Character('A'));    
chars.add(new Character('B'));
chars.add(new Character('C'));

if (chars.contains('A'))
  System.out.println("Lightning fast answer: TRUE");

答案 1 :(得分:1)

char是无符号的16位值,只能使用65,536个值。既然你谈到存在,我就假设你有一个Set而不是一般的Collection。使用BitSet来表示此集合;添加并检查char是否存在,就好像它是一个整数值(因为它是)。这是我能想象到的最快,肯定会比普通HashSet of角色更快,而且只需要8K的内存。

答案 2 :(得分:1)

如果不处理整个unicode字符范围,则一个简单的(bit / bool)数组应该相当快。与哈希相比,您也不必担心冲突。

答案 3 :(得分:0)

您的字母大小是多少? 如果它很小并且所有字符都是ASCII字符,则可以使用数组。

boolean[] chars;
chars['A'] = true;