Java 知道字符集合中是否存在字母的最快方法是什么 我应该用“a”之类的新字符(“a”)来定义hashmap吗 我应该使用排序列表之类的东西吗?或者将其转换为int 简单列表?(这似乎不太有效)

Java 知道字符集合中是否存在字母的最快方法是什么 我应该用“a”之类的新字符(“a”)来定义hashmap吗 我应该使用排序列表之类的东西吗?或者将其转换为int 简单列表?(这似乎不太有效),java,Java,当我问这个字符是否存在时,我需要一个快速的检索。 增加时间几乎不重要 正如我们所说的集合:它取决于集合类型。HashSet为包含的操作提供了最佳性能,即O(1) Set chars=new HashSet(); 字符添加(新字符('A')); 字符添加(新字符('B')); 字符添加(新字符('C')); if(字符包含('A')) System.out.println(“闪电般的回答:真”); 正如我们所说的集合:它取决于集合类型。HashSet为包含的操作提供了最佳性能,即O(1) Set

当我问这个字符是否存在时,我需要一个快速的检索。
增加时间几乎不重要

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

Set chars=new HashSet();
字符添加(新字符('A'));
字符添加(新字符('B'));
字符添加(新字符('C'));
if(字符包含('A'))
System.out.println(“闪电般的回答:真”);

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

Set chars=new HashSet();
字符添加(新字符('A'));
字符添加(新字符('B'));
字符添加(新字符('C'));
if(字符包含('A'))
System.out.println(“闪电般的回答:真”);

A
char
是一个无符号的16位值,只能接受65536个值。既然你谈到存在,我就假设你有一个
集合
,而不是一个普通的
集合
。使用
位集
表示该集;添加并检查
char
是否存在,就像它是一个整数值一样(因为它是一个整数值)。这是我能想象到的最快的,肯定比一个普通的
字符集
要快,而且只需要8K内存。

a
字符
是一个无符号的16位值,只能接受65536个值。既然你谈到存在,我就假设你有一个
集合
,而不是一个普通的
集合
。使用
位集
表示该集;添加并检查
char
是否存在,就像它是一个整数值一样(因为它是一个整数值)。这是我能想象到的最快的,肯定比一个普通的
字符集
要快,而且只需要8K内存。

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

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

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

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

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

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

即使您处理整个范围,内存要求也是可以接受的。请详细说明。散列将对插入内容造成严重影响。但这不是会更快吗?排序数组不会比简单数组快吗?对于索引到数组中,您知道内存中的起始点和数组中的位置,因此这是一个简单的幕后加法。散列使用稍微复杂一点的方法来知道在哪里查找,但可能会发生冲突,然后需要更长的时间。排序是不必要的,因为您确切地知道在数组中查找的位置(按代码位置隐式排序)。即使您处理整个范围,内存要求也是可以接受的。请详细说明。散列将对插入内容造成严重影响。但这不是会更快吗?排序数组不会比简单数组快吗?对于索引到数组中,您知道内存中的起始点和数组中的位置,因此这是一个简单的幕后加法。散列使用稍微复杂一点的方法来知道在哪里查找,但可能会发生冲突,然后需要更长的时间。排序是不必要的,因为您确切地知道在数组中查找的位置(按代码位置隐式排序)。它是用泛型写的。我想改进这一部分,并考虑了SortedList。而且,我从来没有碰撞过。一个字母只出现一次。冲突不是指字符的冲突,而是指散列中的冲突。散列将项目存储在插槽中,如果发现插槽已被填满,则必须以某种方式进行处理。过多的散列冲突会显著降低其速度。不,同时,查找要查找的元素的槽必须采取与插入时完全相同的步骤(槽跳)。否则,您可能无法成功找到实际存在的项目。请参阅现有代码的列表。它是用泛型写的。我想改进这一部分,并考虑了SortedList。而且,我从来没有碰撞过。一个字母只出现一次。冲突不是指字符的冲突,而是指散列中的冲突。散列将项目存储在插槽中,如果发现插槽已被填满,则必须以某种方式进行处理。过多的散列冲突会显著降低其速度。不,同时,查找要查找的元素的槽必须采取与插入时完全相同的步骤(槽跳)。否则,您可能无法成功找到实际存在的项目。看见