当前位置: 首页 > 面试题库 >

如何在地图中获取上一个键/值和下一个键/值

沈俊美
2023-03-14
问题内容

for (Entry entry : map.entrySet()) {
Double key = entry.getKey();
String value = entry.getValue();

        // double nextKey = ?
        // String nextvalue = ?

        // double prevKey = ?
        // String prevValue = ?
    }

迭代地图时是否可以知道上一个元素和下一个元素是什么?


问题答案:

您可以使用NavigableMap此方法,它entrySet()的迭代器以升序顺序返回条目:

NavigableMap<Double, String> myMap = new TreeMap<>();

//...

for (Map.Entry<Double, String> e : myMap.entrySet()) {
    Map.Entry<Double, String> next = myMap.higherEntry(e.getKey()); // next
    Map.Entry<Double, String> prev = myMap.lowerEntry(e.getKey());  // previous

   // do work with next and prev
}

每个条目检索都是O(logN),因此对于完整迭代而言,这不是最有效的方法。为了更有效,在迭代时只需记住最后3个条目,并使用1st作为上一个,使用2nd作为当前,使用第3个。

一个TreeMap的是OrderedMap和NavigableMap,将让你与迭代前进,后退,让你访问一个和下一个键lowerKey()和higherKey()分别。但是,它可能不是最佳解决方案。

您能否描述您要解决的实际问题,我们可以为您提供更合适的解决方案?



 类似资料:
  • 下面是HashMap中包含的值 获取第一个键(即活动键)的Java代码 我们如何收集第一个键“值”(即33),我想把“键”和“值”都存储在单独的变量中。

  • 在javascript中,我有两个映射map1={a:1,b:2,c:3,d:4,e:5};map2={td:a,bd:c,sd:e}; 现在我需要搜索map2的值,即(a,b,e),如果它是map1的键,然后用map1示例中的对应值更新map2的值——map2[td]=a和map[a]=1,然后我想更新map2[td]=1。谁能帮我找到一个算法吗。

  • 我试图从ruby中的哈希表中获取第一个键和值键。我不知道散列的键值,因为它被传递给了方法。我在网上找不到如何将第一个键/值作为单独的哈希表查找。我认为只会试图找到一个名为0的元素,当我运行代码时,它只会返回。 我知道我可以找到密钥名和值,然后根据它们创建一个新的哈希,但我想知道是否有更简单的方法来做到这一点,这样我就可以立即得到一个哈希。 下面是我的代码: 这让我得到了正确的结果问题是我不明白为什

  • 问题内容: 我正在用c#。创建一个Winform应用程序,并使用sql数据库。 我有一个表,其中有列,如和。是自动递增,所有其他数据类型是。 我正在使用此代码来获取下一个自动增量值: 我在textBox上显示。 但是,当删除表中的最后一行时,我仍然得到该值,该值最近在文本框中删除了 我应该如何获得下一个自动增量值? 问题答案: 要从SQLServer获取下一个自动增量值: 这将获取当前的自动增量值

  • 问题内容: 假设我有ID为3、4、7、9的记录,并且我希望能够通过下一个/上一个链接导航到另一个。问题是,我不知道如何获取具有最近的较高ID的记录。 因此,当我有一个ID为4的记录时,我需要能够获取下一个现有记录,即7。查询可能看起来像 如何获取下一个/上一个记录而不获取整个结果集并手动进行迭代? 我正在使用MySQL 5。 问题答案: 下一个: 以前:

  • 问题内容: REDIS中有任何快速命令可以让我执行以下操作吗? 我想将键Y的值设置为等于键X的值。 我如何从Redis Client执行此操作。 我使用标准的Redis-cli客户端。 基本上,我正在寻找以下等效项- 问题答案: 您可以使用Lua脚本执行此操作: KEYS1是源密钥 KEYS2是目标键 下面的示例使用SCRIPT LOAD创建脚本,并使用EVALSHA传递以下参数来调用该脚本: 从