定义了一个int类型数组,长度为10000,但是实际上存储的数据只占一小部分,而且这一小部分的长度未知,那么在最后输出这个数组时,如何能做到不输出剩下的初始值零,或者在初始化数组时不确定数组长度
时间: 2024-09-21 16:06:56 浏览: 62
java实现把一个List集合拆分成多个的操作
当你定义一个固定大小但实际数据量小于其总容量的整型数组时,确实可能会浪费空间并显示多余的初始值。如果你不想在输出时显示这些未被赋值的0,有几种方法可以处理这种情况:
1. **动态分配**:使用`ArrayList`或`LinkedList`等可变大小容器,它们会自动管理内存,根据需要增长。这样,在添加元素后,你可以遍历这些集合而不必担心额外的0。
```java
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> array = new ArrayList<>();
// 添加元素
array.add(1);
array.add(2);
// 输出时迭代列表
for (Integer num : array) {
System.out.print(num + " ");
}
}
}
```
2. **按需填充**:如果你知道具体能填充多少元素,可以在创建数组后用循环直接设置这些位置的值,其他位置则保持默认值。
```java
public int[] fillArray(int length, int... data) {
int[] array = new int[length];
if (data.length < length) {
System.arraycopy(data, 0, array, 0, data.length);
}
return array;
}
// 使用时
int[] customArray = fillArray(10000, 1, 2, 3, ...); // 传入实际要填充的元素
```
3. **位图或标记**:如果数据量相对较小,可以用一个单独的“已填充”标志数组(bool类型)来跟踪哪些索引已被填充。这适用于填充的元素数量远少于数组大小的情况。
```java
public boolean[] isFilled = new boolean[10000]; // 初始化为false
for (int i = 0; i < actualLength; i++) {
isFilled[i] = true; // 标记当前位置
array[i] = ...; // 设置元素值
}
// 输出时只打印isFilled对应的true索引
for (int i = 0; i < isFilled.length; i++) {
if (isFilled[i]) {
System.out.print(array[i] + " ");
}
}
```
阅读全文