【问题标题】:Array declaration to allow any int value as index允许任何 int 值作为索引的数组声明
【发布时间】:2020-05-10 19:37:50
【问题描述】:

有没有办法声明一个int数组(arr),这样 索引 i 可以表示任何数字

所以 arr[i] 永远不会返回错误,只要值是

我试过int[] arr = new int[Integer.MAX_VALUE],但这需要太多空间,不可行。

【问题讨论】:

  • 数组是固定大小的,所以没有真正的办法解决它需要大量空间的问题。您是否考虑过使用其他数据结构,例如以 Integer 为 Key 的 Map?
  • 这听起来像是 XY 问题,您真的想做什么?
  • @SDJ 更像是 8 GB。 Integer 的大小为 4 个字节,((long) Integer.MAX_VALUE * 4) 为 8589934588(字节),大约为 8.5 GB
  • 哎呀,对,正好是 8GB,1024 定义为“kilo”等。
  • @SDJ 我相信你的意思是 gibibyte,它是 GiB 的缩写

标签: java arrays max


【解决方案1】:

在 Java 中,不能声明没有大小的数组。您不需要使用数组为所有未使用的索引占用内存。您需要的是一个地图,它对您的用例来说是节省空间的。

    Map<Integer, Object> index = new HashMap<>();

    //store
    index.put(1, "Value 1");
    index.put(2, "Value 2");

    //retrieve
    index.get(1); //returns: Value 1

【讨论】:

  • 这是个好主意。在这种情况下,为尚未添加的索引返回的值将是 null。只要没问题,这对我来说应该是一个很好的解决方案。但是,在数组的情况下,我认为0 将针对未专门设置的索引返回。
  • @SreeKumar 真的。但是我们可以很容易地通过使用getOrDefault(i, 0)方法得到之前的行为,并且对于i的不可用键值返回0。
  • @OHGODSPIDERS 同意。
猜你喜欢
  • 1970-01-01
  • 2022-01-13
  • 2021-03-27
  • 1970-01-01
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多