我有一个包含很多单词的字符串数组。我希望获取数组中包含的单词的索引(如果不包含则为-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/