gpt4 book ai didi

java - 生成值和键来填充 map ,以及我应该使用哪种类型的 map

转载 作者:行者123 更新时间:2023-12-01 12:27:26 25 4
gpt4 key购买 nike

我的想法是在 map 内生成键和值,但我不确定应该使用什么类型的 map 。这将是我第一次使用映射,而且我听说 HashMap 不太适合为该特定键保存一组值。

所以,这就是我想要完成的任务。我想要一个键为“X,Y”的 map ,其中 x 和 y 介于 1 和 8 之间,值是“X-1,Y-2”、“X-1,Y+2”的数组列表, “X+1,Y-2”,“X+1,Y+2”等。我从来没有做过 map ,所以我想我缺乏映射的一般概念,所以我想知道这是否真的会有可能吗,如果可以的话,有人可以给我一个例子来作为我的代码的基础。

这是一个很快就要到期的项目,我直到现在才开始,尽管我有两周的时间来做,所以我希望能尽快得到答复。提前致谢。

我想要的示例:

键 -> "5,5": 值 -> ["4,7", "4,3", "6,7", "6, 3", "7,4", "7,6 ", "3,4", "3,6"]

顺便说一句,我的目标是让每个值实际上类似于映射中的键,因此可以很容易地使用其中一个值来使用另一个同名的键。

I.E“4,7”导致Key ->“4,7”,如果映射不可能,我可以用代码在其外部进行模拟。

最佳答案

首先,您不需要 map 。这里只有 64 个可能的值 (8x8)。如果需要,您可以使用二维数组。这可以让事情变得更容易处理。在这种情况下,您只需使用 data[y][x]并将列表存储在该位置。

此外,您甚至不需要数组,因为值完全基于键。您可以有一个如下所示的函数: Collection<Pair<Integer,Integer>> getData(Integer x, Integer y)它返回您要返回的值集(我从 Apache Commons Lang 借用 Pair,但它很容易编码)。

<小时/>

好吧,你确实想使用 Map 。正如您所注意到的,可以使用多种版本的实现类。在大多数情况下,它实际上可以归结为两个,也许三个(我喜欢第四个)。

它们可以分为两个不同的子接口(interface) - 实现 SortedMap NavigableMap 的子接口(interface)(使用 Navigable Map,它是 Java 1.6 中 SortedMap 的替代品)和那些没有的。

如果您希望按顺序存储和返回内容(并且能够按照键的顺序执行操作),那么您需要一个 NavigableMap。它为您提供类似 higherKey(K key) 的功能这将返回存储在 key 上方的 map 中的下一个更高值传入。但是,NavigableMap 只能存储可排序的键。如果键不可排序,则将其存储在 NavigableMap 中是没有意义的。 NavigableMap 的经典实现是 TreeMap虽然我喜欢ConcurrentSkipListMap因为一些特定的属性(在某些情况下它有点快,我可以更容易地推理它)。

否则,您可能会查看 HashMap 的随机访问速度。 。 HashMap 并不按照给定的顺序存储内容——它只是将它们粘贴到哈希函数指定的位置。这使得它可以更快地访问某些内容,以确定 key 是否在 map 中并存储它。但这也意味着,如果您想迭代映射中的键,它们会以“随机”顺序出现。

HashMap 有一个变体,它是子类 LinkedHashMap 。它不仅具有 HashMap 的快速查找功能,而且还在 HashMap 旁边存储了一个链表。当您迭代键时,您正在处理此链接列表(但它未排序 - 它按插入顺序存储)。您可以使用 LinkedHashMap 使用一些技巧来从列表中删除最旧的元素。这使您可以将其用于 LRU cache .

一般来说,您需要 HashMap 或 TreeMap,具体取决于您希望如何从 Map 中获取数据。

值得一读的是 Collections Framework Overview来自甲骨文。我也会给 The Power of Associative Arrays来自 Dobb 博士的读物 - 映射的概念在不同的语言中被称为可能的东西(散列、字典、有限映射、查找表等)。了解 map 背后的概念可以更轻松地决定使用哪一个 map 以及如何使用它。

关于java - 生成值和键来填充 map ,以及我应该使用哪种类型的 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26205641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com