【问题标题】:Is there a data structure with both ArrayList and Map-like properties?是否存在同时具有 ArrayList 和类似 Map 属性的数据结构?
【发布时间】:2025-11-22 11:10:01
【问题描述】:

我有一系列数据,每个其他值都与它之前的值配对。

2 3 5 6 8 9 12 5
例如,2 将与 3 一起写出,5 与 6 一起写出(作为指数,但这并不真正相关)。

我不确定一行中有多少个值,所以我想使用一个 ArrayList,但我需要将它们链接起来。我希望 2 以 2D 数组的样式与 3 相关联。

我不能使用映射,因为它们的键可能会在整个地方重复,因此键/值关联不会有任何独特的特征。我只需要一个可扩展的二维数组,但我不确定我是否可以从 HashMap、ArrayList、二维数组或我知道的任何其他数据结构中得到它。

任何指针?

编辑: 澄清一下,这将代表 2 ^ 3 5 ^6 8 ^ 9 等,我希望最终以可读的形式打印出来,我还需要按最高指数值排序。所以我需要对它们进入数据结构的顺序进行一些控制。

【问题讨论】:

  • 您期望代表的最高指数是多少?所有指数都是整数吗?
  • 是的,所有指数都是整数,我想它可能会很高,但我不会假设超过 20
  • 你能使用一个由 21 个数字组成的数组,每个指数一个数字吗?未使用的指数在该数组中为零,因此您不会打印它们。
  • 保持对的顺序重要吗?

标签: java arrays map arraylist multidimensional-array


【解决方案1】:

为什么不创建一个类来将两个数字放在一起呢?然后您可以使用List<Pair> 来保存您的所有数据。

public class Pair {
    private final int a;
    private final int b;

    public Pair(int a, int b) {
        this.a = a;
        this.b = b;
    }

    public int getA() {
        return a;
    }

    public int getB() {
        return b;
    }
}

/e

由于您需要排序,您可以让Pair 实现Comparable<Pair>,或者创建一个Comparator<Pair>,这样您就可以使用Collections.sort 来组织您的数据。

【讨论】:

  • 我在评论比较器,你添加了 xD +1
【解决方案2】:

构造一个ArrayList<Integer[]>,其中每个Integer[] 的长度为2。ArrayList 是可扩展的,并允许使用.get(index1)[index2] 访问一对元素。

【讨论】:

  • 您能否按 Integer[] 中的两个值之一对 ArrayList 进行排序?
  • 是的;使用Collections.sort(如@Jeffrey 所述)。 Collections.sort(yourArrayList, new Comparator<Integer[]>(){ public int compare(Integer[] a, Integer[] b) { return a[indOfExponent]-b[indOfExponent]; //or b[indOfExponent] - a[indOfExponent] } }); Ed:请原谅格式; c+p 代码到编辑器中。
【解决方案3】:

如果顺序不重要,您可以有一个列表映射,其中映射键是基数,列表中的每个项目都是基数提升到的指数之一。

例如,如果你的线条看起来像:

1 2 1 3 2 4 2 5 3 6

地图看起来像:

{ 1 -> [2, 3], 2 -> [4, 5], 3 -> [6] }

【讨论】:

    最近更新 更多