java - 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”。然后我可以将它们重新组合到另一端的列表中。不幸的是,该列表未排序。
如何有效地压缩列表以将其保存在数据库或文本形式中并将其传输到另一台设备?
解决方案
根据我目前掌握的信息,最好的解决方案是编写一个类 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]);
您需要编写一个将地图解析为字符串或类似内容的方法,但为此我没有足够的信息。
推荐阅读
- android - 在 android studio 中创建 CSV,以便从项目中获取
- c - 调用以结构为参数的 C 函数
- java - 用java存储聊天消息对象的最佳集合是什么?
- x86 - 将 16 位值的 __m256i 打包(饱和)到 8 位值的 __m128i?
- c++ - while(t-- >0) 是什么意思
- microcontroller - 为什么8051中的程序地址寄存器连接到8位总线?
- mysql - 带有乱码值的mysql表
- c++ - cplex的最优解和cplex的最优解有什么区别?
- c# - c# 将文件内容存储到 MemoryStream 并读回
- flutter - onRefresh 回调返回 null