我正在使用给定的代码在 ListView 中生成序列号,最多可达 11 位数字的特定范围。最多十位数字,生成的序列如 0333624140 至 0333624160(例如 0333624140,0333624141,0333624142,0333624143 等),但如果我们将所需的值更改为 11 位数字,如 03336241441 至 03336241450然后应用程序崩溃。
btngenerate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int value1;
int value2;
value1 = Integer.parseInt(txtfirst.getText().toString());
value2 = Integer.parseInt(txtsecond.getText().toString());
for(int i=value1;i<=value2;i++){
list.add(""+i);
li.setAdapter(arrayAdapter);
}
}
});
最佳答案
对于如何编写此代码来说,这是一个完全 splinter 的想法。您正在创建一个数组,其中可以包含 11 位长的每个数字。那是 110 亿件元素。即使每个对象只占用 8 个字节(4 个用于值,4 个用于引用。实际情况会比这个多),这也是 880 亿字节,即大约 9.5 GB。那永远不会适合内存,在那之前你就会 OOM WAY。
有很多方法可以做到这一点。您的适配器不需要包含其中每个项目的数组,因为它是一个连续范围,它只需要开始和结束索引,并且可以根据开始索引和偏移量计算每个索引的值。但是拥有每个值的列表是行不通的。
关于java - 如何生成指定范围的 11 位序列号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77550641/