java - 使用 hashCode 获取数组 java 元素的索引

标签 java arrays hash hashcode

我有一个包含很多单词的字符串数组。我希望获取数组中包含的单词的索引(如果不包含则为-1)。

我首先创建了一个循环来搜索数组中的所有元素,同时递增变量,当找到它时,我返回变量的值。

然而,数组可能非常非常大,因此搜索所有元素的速度非常慢。我决定在字符串数组中添加新单词之前,我将使用 hashCode() % arrayLength 来获取应该放置它的位置的索引。然后,为了取回索引,我只需重用 hashCode() % arrayLength 即可立即知道它是什么索引。

问题在于有时会出现“冲突”,两个元素在数组中可以具有相同的索引。

有人知道如何处理吗?或者还有其他方法可以更快地获取元素的索引吗?

最佳答案

您正在尝试实现 Open Addressing使用数组。除非这是一个家庭作业,否则 Java 标准库已经有类来解决搜索和碰撞问题。

您可能想使用HashSet来检查String是否存在。它在幕后使用 HashMap 实现 Separate Chaining解决冲突。

String[] words = { "a" };
Set<String> set = new HashSet<>(Arrays.asList(words));
return set.contains("My Word") ? 1 : -1;

关于java - 使用 hashCode 获取数组 java 元素的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53817586/

相关文章:

java - 多维数组

arrays - 如何按特定顺序打印 Perl 散列?

hash - 如何在 Go 中生成字符串的哈希数?

java - 如何在 Java 中删除标点符号但保留首字母缩写词和连字符单词?

arrays - Powershell Regex 使用 -Split() 手动创建 $Args[*] 数组

php - Mysql数据转PHP数组,然后显示?

ruby - 为什么我不能从 ruby​​ 中的选定键创建新的散列?

来自源的 Java Parse 类名

java - 在特定的 JRE 中执行 JAR 文件

java - com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException : Duplicate entry '5' for key 'PRIMARY'