Эккель Брюс
Шрифт:
}
} /// ~
Каждая версия primitive создает примитивный массив правильной длины, а затем копирует элементы из массива in. Обратите внимание на выполнение автоматической распаковки в выражении
result[i] = in[i];
Пример использования ConvertTo с обеими версиями Generated.array:
//: arrays/PrimitiveConversionDemonstration.java import java.util.*; import net.mindview.util.*;
public class PrimitiveConversionDemonstration { public static void main(String[] args) {
IntegerC] a = Generated.array(Integer.class,
new CountingGenerator.IntegerO. 15); int[] b = ConvertTo.primitive(a); System.out.pri ntin(Arrays.toStri ng(b)); boolean[] с = ConvertTo.primitive(
Generated.array(Boolean.class.
new CountingGenerator.BooleanO, 7)); System. out. pri nti n(Arrays. toStri ng(c));
}
} /* Output:
[0. 1. 2, 3, 4, 5, 6. 7. 8. 9. 10. 11. 12. 13. 14] [true, false, true, false, true, false, true] *///:-
Наконец, следующая программа тестирует инструментарий создания массивов с классами RandomGenerator:
//: arrays/TestArrayGeneration.java
// Test the tools that use generators to fill arrays.
import java.util.*;
import net.mindview.util.*;
import static net.mindview.util .Print.*;
public class TestArrayGeneration {
public static void main(String[] args) { int size = 6;
boolean[] al = ConvertTo.primitive(Generated.array(
Bool ean. class, new RandomGenerator.BooleanO, size)); printC'al = " + Arrays.toString(al)); byte[] a2 = ConvertTo.primitive(Generated.array(
Byte.class, new RandomGenerator.Byte, size)); print("a2 = " + Arrays.toString(a2)); char[] a3 = ConvertTo.primitive(Generated.array( Character.class,
new RandomGenerator.CharacterO, size)); print("a3 = " + Arrays.toString(a3)); продолжение & short[] а4 = ConvertTo.primitive(Generated.array(
Short.class, new RandomGenerator.ShortО. size)); print("a4 = " + Arrays.toString(a4)); int[] a5 = ConvertTo primitive(Generated.array(
Integer.class, new RandomGenerator.IntegerO. size)); print("a5 = " + Arrays.toString(a5)); long[] a6 = ConvertTo.primitive(Generated array(
Long.class, new RandomGenerator.Long. size)), print("a6 = " + Arrays.toString(a6)); floatt] a7 = ConvertTo.primitive(Generated.array(
Float.class, new RandomGenerator.FloatО. size)); print("a7 = " + Arrays.toString(a7)); doubled a8 = ConvertTo primitive(Generated.array(
Double.class, new RandomGenerator.DoubleO, size)); print("a8 = " + Arrays.toString(a8));
}
} /* Output:
al = [true, false, true, false, false, true] a2 = [104, -79, -76, 126, 33, -64] a3 = [Z, n, T, c. Q. r]
a4 = [-13408, 22612, 15401, 15161, -28466, -12603] a5 = [7704, 7383, 7706, 575, 8410, 6342] a6 = [7674, 8804, 8950, 7826, 4322, 896] a7 = [0.01, 0.2, 0.4, 0.79, 0.27, 0.45] a8 = [0 16, 0.87, 0.7, 0.66, 0.87, 0.59] *///:-
Как видите, все версии ConvertTo.primitive работают правильно.
Вспомогательный инструментарий Arrays
В библиотеку java.util включен класс Arrays, содержащий набор вспомогательных статических методов для работы с массивами. Основных методов шесть: equals сравнивает два массива (также существует версия deepEquals для многомерных массивов); fill был описан ранее в этой главе; sort сортирует массив; binarySearch ищет элемент в отсортированном массиве; toStringQ создает представление массива в формате String, a hashCode генерирует хеш-код массива. Все эти методы перегружены для всех примитивных типов и Object. Кроме того, метод Arrays.asList преобразует любую последовательность или массив в контейнер List (см. главу 11).
Прежде чем обсуждать методы Arrays, следует рассмотреть еще один полезный метод, не входящий в Arrays.
Копирование массива
Стандартная библиотека Java содержит статический метод System.arraycopy, который копирует массивы значительно быстрее, чем при ручном копировании в цикле for. Метод System.arraycopy перегружен для работы со всеми типами. Пример для'массивов int:
//: arrays/CopyingArrays.java // Using System.arraycopyO
import java.util.*;
import static net.mindview.util.Print.*;
public class CopyingArrays {
public static void main(String[] args) { int[] i = new int[7]; int[] j = new int[10]; Arrays.fill(i. 47); Arrays.fill(j. 99); printC'i = " + Arrays.toString(i)); printC'j = " + Arrays.toString(j)); System.arraycopy(i. 0. j. 0. i.length); printC'j = " + Arrays.toString(j)); int[] к = new int[5]; Arrays.fill(k. 103); System.arraycopy(i. 0. к. 0. к length); printC'k = " + Arrays.toString(k)); Arrays.fill(k, 103); System.arraycopy(k, 0. i, 0, k.length); printC'i = " + Arrays.toString(i)); // Объекты: