【问题标题】:Repositioning elements in an array with new different indexes使用新的不同索引重新定位数组中的元素
【发布时间】:2020-04-25 16:59:00
【问题描述】:

我正在为我的课程使用 Java 开发一个基本的哈希表项​​目,但我已经感到很沮丧。 我只想知道如何重新定位数组中的元素(字符串)。给定新的索引,我将如何将元素放在一个新的位置,这些索引来自将它的哈希码划分为数组的大小。此外,当发生冲突时,例如 2 个字符串具有相同的索引,趋势是将数组大小加倍,从数组中所有现有单词中获取新索引值并将其放回新索引中。

example

example cont.

我真的需要在 4 月 30 日之前得到答案,我真的希望一些好心人能回答我的问题,因为我从本月初就一直在努力解决这个问题。

【问题讨论】:

  • 你能分享你的代码吗?
  • 如果你已经为此工作了 25 天,你肯定有一些代码要分享

标签: java arrays loops project


【解决方案1】:

我编写了这段代码,它采用需要根据您的方法重新排序的字符串数组并返回一个 HashMap (map),其中键是字符串,其值是它的新索引,总是根据计算到你的方法。

我临时创建了hashcode(String str) 函数,你必须插入你的。

现在您唯一需要做的就是研究 map 以创建新的重新排序的字符串数组。

代码

public static Map<String, Integer> newIndexesMap(String[] a) {
        Map<String, Integer> map = new HashMap<>();
        int length = a.length;
        for (int i = 0; i < a.length; i++) {
            int newIndex = hashcode(a[i]) % length;
            // Check that the new index is not already used by another key
            if (map.containsValue(newIndex)) {
                length = length * 2;
                i = -1;
                map.clear();
            } else
                map.put(a[i], newIndex);
        }
        return map;
}

【讨论】:

  • 还有一件事,我们不能使用内置的哈希码函数,只能使用循环和数组
  • 好吧,在你的情况下,最好的办法是编写你自己的哈希码函数。它接受一个元素作为参数,它控制是否可以对该元素进行散列,它返回正确的散列。如果您有更多问题,请告诉我,如果没有将您的问题标记为已解决,谢谢!
  • 这正是我所需要的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-26
  • 2015-04-09
  • 1970-01-01
相关资源
最近更新 更多