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

时间:2013-04-02 03:02:52

标签: java data-structures mapping

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

例如,

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

    1 -> 138, 92, 835, 841, 12
    2 -> 766, 324, 26, 933, 62
    3 -> 53, 131, 62, 121, 67
    4->160, 160 #NOT OK
    4-> 162, 171, 594, 912, 455
    ...
    1000->146, 981, 67, 246, 146

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

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

3 个答案:

答案 0 :(得分:2)

使用

Map<Long, Set<Long>> numberToValuesMap;

Set表示唯一性

答案 1 :(得分:1)

您需要一组数据列表:

ArrayList<Set<Long>>

Set要求值只在集合中一次,当然列表是这些集合的列表。

然后,您可以使用ArrayList上的get(index)方法获取特定的序数。

ArrayList<Set<Number>> mappings = new ArrayList<Set<Long>>();

Set<Long> s = new HashSet<Long>();
long[] n = {138, 92, 835, 841, 12};
s.addAll( Arrays.toList( n));
mappings.add(1, s);
// etc.

稍后,要获取:

Set<Long> result = mappings.get(1); // for element in slot 1...

答案 2 :(得分:0)

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

int[][] a = new int[1001][];

然后为每个值创建一个int:

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