您可以使用增强的for循环(aka foreach)或使用数组索引来遍历数组:
int[] array = new int[10];
// 使用索引:读写
for (int i = 0; i < array.length; i++) {
array[i] = i;
}// 扩展为:只读
for (int e : array) {
System.out.println(e);
}在这里值得注意的是,没有直接的方法可以在数组上使用迭代器,但是通过数组库,可以很容易地将其转换为列表以获取Iterable对象。
对于盒装数组,请使用Arrays.asList:
Integer[] boxed = {1, 2, 3};
Iterable<Integer> boxedIt = Arrays.asList(boxed); // 列表支持的可迭代
Iterator<Integer> fromBoxed1 = boxedIt.iterator();对于原始数组(使用Java 8),请使用流(在此示例中特别是Arrays.stream--> IntStream):
int[] primitives = {1, 2, 3};
IntStream primitiveStream = Arrays.stream(primitives); // 列表支持的可迭代
PrimitiveIterator.OfInt fromPrimitive1 = primitiveStream.iterator();如果您不能使用流(没有Java 8),则可以选择使用Google的番石榴库:
Iterable<Integer> fromPrimitive2 = Ints.asList(primitives);
在二维数组或更高的数组中,两种技术都可以以稍微复杂一些的方式使用。
例:
int[][] array = new int[10][10];
for (int indexOuter = 0; indexOuter < array.length; indexOuter++) {
for (int indexInner = 0; indexInner < array[indexOuter].length; indexInner++) {
array[indexOuter][indexInner] = indexOuter + indexInner;
}
}for (int[] numbers : array) {
for (int value : numbers) {
System.out.println(value);
}
}如果不使用基于索引的循环,则无法将Array设置为任何非均匀值。
当然,在使用索引进行迭代时,也可以使用while或do-while循环。
注意事项之一:使用数组索引时,请确保索引介于0和之间array.length - 1(包括两端)。不要对数组长度进行硬编码的假设,否则,如果数组长度发生变化,您可能会破坏代码,但硬编码值不会发生变化。
例:
int[] numbers = {1, 2, 3, 4};
public void incrementNumbers() {
// 做这个 :
for (int i = 0; i < numbers.length; i++) {
numbers[i] += 1; //或这样:数字[i] =数字[i] +1;或数字[i] ++;
}
// 不要这样做:
for (int i = 0; i < 4; i++) {
numbers[i] += 1;
}
}如果不使用复杂的计算来获取索引,而是使用索引进行迭代,并且如果需要不同的值来计算,那也是最好的选择。
例:
public void fillArrayWithDoubleIndex(int[] array) {
// 做这个 :
for (int i = 0; i < array.length; i++) {
array[i] = i * 2;
}
// 不要这样做:
int doubleLength =array.length* 2;
for (int i = 0; i < doubleLength; i += 2) {
array[i / 2] = i;
}
}以相反的顺序访问数组
int[] array = {0, 1, 1, 2, 3, 5, 8, 13};
for (int i =array.length- 1; i >= 0; i--) {
System.out.println(array[i]);
}使用临时数组减少代码重复
遍历临时数组而不是重复代码可以使代码更整洁。它可以在对多个变量执行相同操作的情况下使用。
// 我们要打印所有这些
String name = "Margaret";
int eyeCount = 16;
double height = 50.2;
int legs = 9;
int arms = 5;
// 复制粘贴方法:
System.out.println(name);
System.out.println(eyeCount);
System.out.println(height);
System.out.println(legs);
System.out.println(arms);
// 临时数组方法:
for(Object attribute : new Object[]{name, eyeCount, height, legs, arms})
System.out.println(attribute);
// 仅使用数字
for(double number : new double[]{eyeCount, legs, arms, height})
System.out.println(Math.sqrt(number));请记住,由于每次进入循环都会创建一个数组,因此该代码不应在对性能有严格要求的部分中使用,并且原始变量将被复制到该数组中,因此无法进行修改。