Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于保存映射到数组的值的Java数据结构_Java_Data Structures_Mapping - Fatal编程技术网

用于保存映射到数组的值的Java数据结构

用于保存映射到数组的值的Java数据结构,java,data-structures,mapping,Java,Data Structures,Mapping,我有点不知道使用哪种数据结构来有效地解决我的问题。我想将数组映射到一个值。我的意思是,如果我有1000个值,我需要能够将多个其他值映射到1000个值中的每一个 比如说, 我有1-1000之间的1000 A值。对于每个值A,我想映射k个其他值B(这些值的范围也在1-1000之间)。但我确实希望确保映射到A的任何值都不会重复。不同A值之间的映射值可以相同(即2和1000都有67个映射到它们) 因此,当我查看某个任意值A时,我应该能够很容易地识别映射到它的任何值。因此,如果我想访问值3,我应该能够打印

我有点不知道使用哪种数据结构来有效地解决我的问题。我想将数组映射到一个值。我的意思是,如果我有1000个值,我需要能够将多个其他值映射到1000个值中的每一个

比如说,

我有1-1000之间的1000 A值。对于每个值A,我想映射k个其他值B(这些值的范围也在1-1000之间)。但我确实希望确保映射到A的任何值都不会重复。不同A值之间的映射值可以相同(即2和1000都有67个映射到它们)

因此,当我查看某个任意值A时,我应该能够很容易地识别映射到它的任何值。因此,如果我想访问值3,我应该能够打印出值A(3)及其相关值(53、131、62、121、67)

我希望这是有道理的。实现这种数据结构的最佳方式是什么?任何解释或示例的帮助都将不胜感激。

使用

Map<Long, Set<Long>> numberToValuesMap;
Map numberToValuesMap;
设置
唯一性

使用

Map<Long, Set<Long>> numberToValuesMap;
Map numberToValuesMap;

集合
为了唯一性

您需要集合的数组列表:

ArrayList<Set<Long>>
稍后,要获取:

Set<Long> result = mappings.get(1); // for element in slot 1...
Set result=mappings.get(1);//对于插槽1中的元素。。。

您想要一个集合数组列表:

ArrayList<Set<Long>>
稍后,要获取:

Set<Long> result = mappings.get(1); // for element in slot 1...
Set result=mappings.get(1);//对于插槽1中的元素。。。

如果您有连续值(甚至接近连续值),则不需要“映射”,您可以使用一个简单的数组:

int[][] a = new int[1001][];
然后为每个值创建一个int数组:

a[1] = new int[]{138, 92, 835, 841, 12};

etc

如果您有连续值(甚至接近连续值),则不需要“映射”,您可以使用一个简单的数组:

int[][] a = new int[1001][];
然后为每个值创建一个int数组:

a[1] = new int[]{138, 92, 835, 841, 12};

上面的etc

与map一起使用也可以,但是键的自然顺序可能不会被保留--如果需要保留顺序,则必须在迭代之前对键集进行排序。您可以使用
TreeSet
与map一起保留上面的顺序也可以,但是键的自然顺序可能不会被保留——如果需要保留顺序,您必须在迭代之前对键集进行排序。您可以使用
TreeSet
来保留顺序您将很难确保此实现的“唯一”约束。这似乎是唯一的缺点。否则,它看起来非常简单和直接,这是我喜欢的。您将很难确保此实现的“唯一”约束。这似乎是唯一的缺点。否则,它看起来非常简单和直接,我喜欢。使用
Map进行检索将更加容易和高效
检索也同样容易使用list(因为序号本质上是Map键),并且具有O(1)查找时间,因为它由数组支持,使用
Map
检索会更容易、更高效。使用list(因为序号本质上是Map键)检索也同样容易,并且具有O(1)查找时间,因为它由数组支持,而这对于Map来说是不正确的。