首页 > 解决方案 > Java:如何存储和传输巨大的 Integer-ArrayList

问题描述

我的 Java 应用程序必须使用充满整数值的非常大的 ArrayList。操作这些 ArrayList 是没有问题的,但是这些 ArrayList 也需要传输和存储,我还没有找到有效的方法来做到这一点。

该列表主要由连续的整数值组成,例如:

1 -> 5000
2 -> 5001
3 -> 5002
4 -> 5003
5 -> 5005
6 -> 5006
7 -> 5007

所以我会想象该列表可以如下传输:“5000-5003; 5005-5007”。然后我可以将它们重新组合到另一端的列表中。不幸的是,该列表未排序。

如何有效地压缩列表以将其保存在数据库或文本形式中并将其传输到另一台设备?

标签: javaarraylist

解决方案


根据我目前掌握的信息,最好的解决方案是编写一个类 Map ,如下所示:

public class Map {
    public final int offset;
    public final int length;

    public Map(int off, int len) {
        offset = off;
        length = len;
    }
}

以及将所有整数编码为地图对象的循环:

List<Map> mapList = new ArrayList<>();
Collections.sort(list);
int[] array = list.toArray(new int[0]);
int index = 0;

while(index < array.length) {
    int off = array[index];
    int len = 1;

    for(int i = 1; index + i < array.length; i++) {
        if(array[index + i] != array[index] + i) break;
        len++;
    }

    mapList.add(new Map(off, len);
    index += len;
}

Map[] maps = mapList.toArray(new Map[0]);

您需要编写一个将地图解析为字符串或类似内容的方法,但为此我没有足够的信息。


推荐阅读