用于保存映射到数组的值的Java数据结构
我有点不知道使用哪种数据结构来有效地解决我的问题。我想将数组映射到一个值。我的意思是,如果我有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) 我希望这是有道理的。实现这种数据结构的最佳方式是什么?任何解释或示例的帮助都将不胜感激。使用用于保存映射到数组的值的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,我应该能够打印
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来说是不正确的。