大地图会减慢 android 程序的速度吗?

时间:2021-05-05 21:17:17

标签: java android

我正在开发一个 android 应用程序,并有一张地图,我在其中将许多条目放入 onCreate。 该地图的形式为:

Map<String, Map<Integer, Integer[]>> map

我打算用它做的是随机选择一个字母,然后随机选择一个数字,然后返回整数列表。我打算输入大约一千个数字及其相应的列表,例如(这是草稿):

map.put("A").put(1, new int[]{1,2,3,4,5,6,7,8,9,10});

map.put("A").put(2, new int[]{2,3,4,5,6,7,8,9,10,11});

.
.
.

map.put("Z").put(1000, new int[]{3456,3459,245,243,422,112,888,556,332,111});

关于这个我有两个问题。 由于我多次使用“put”函数,这是否会降低 onCreate 中的应用程序的速度,如果是这样,我如何才能更有效地执行此操作?

其次,“大”(我不知道这是否真的很大)地图可能会导致旧手机出现问题,这可能会更慢?

1 个答案:

答案 0 :(得分:0)

如果您知道第二张地图的最大尺寸,您可以将其更改为多维数组:

int max = 1000;
Map<String, int[][]> map = new HashMap<String, int[][]>();
map.putIfAbsent("A", new int[max][]);
map.get("A")[1] = new int[]{1,2,3,4,5,6,7,8,9,10};
map.get("A")[2] = new int[]{2,3,4,5,6,7,8,9,10,11};

// for getting

int[][] data = map.get("A");
int[] idx1 = null;
if(data != null){
    idx1 = data[1];
}

在此示例中,我在插入数百万条数据时获得了超过 300% 的性能。 它可能会消耗更多内存,但会为您带来更快的速度。

不要忘记用 map.putIfAbsent 来初始化一个空数组

编辑: 如果代码在 android 设备上运行并且第二张地图的键始终是原始的,您可以使用 SparseArray

查看this question了解更多详情。

相关问题