Чтение онлайн

на главную - закладки

Жанры

Философия Java3

Эккель Брюс

Шрифт:

new CountingGenerator.IntegerO, 15): System, out. pri nti n(Arrays. toStri ng(b)):

}

} /* Output: [9. 8, 7. 6] [0. 1. 2. 3]

[0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14] *///:-

Хотя массив а инициализируется, эти данные перезаписываются при вызове Generated.array. Инициализация b показывает, как создать заполненный массив «с нуля».

Параметризация не работает с примитивами, поэтому для заполнения примитивных массивов будут использоваться генераторы. Для решения этой проблемы мы создадим преобразователь, который

получает произвольный массив объектных «оберток» и преобразует его в массив соответствующих примитивных типов. Без него нам пришлось бы создавать специализированные генераторы для всех примитивов.

//: net/mi ndvi ew/uti1/ConvertTo.java

package net.mi ndvi ew.uti1;

public class ConvertTo {

public static booleanC] primitive(Boolean[] in) { boolean[] result = new boolean[in.length], for(int i = 0; i < in.length; i++)

result[i] = in[i]; // Автоматическая распаковка return result;

}

public static chart] primitive(Character[] in) { chart] result = new char[in.length]; for(int i = 0; i < in.length; i++)

result[i] = in[i]; return result;

}

public static byte[] primitive(Bytet] in) { bytet] result = new bytetin.length]; for(int i = 0; i < in.length; i++)

resultti] = inti]; return result;

}

public static shortt] primitive(Short[] in) { shortt] result = new shorttin.length]; for(int i = 0; i < in.length; i++)

resultti] = inti]; return result;

}

public static int[] primitivedntegert] in) { intt] result = new int[in.length]: for(int i = 0; i < in.length; i++)

resultti] = inti]; return result;

}

public static longt] primitive(Longt] in) { longt] result = new longtin.length]; for(int i = 0; i < in.length; i++)

resultti] = inti]; return result;

}

public static floatt] primitive(Float[] in) { floatt] result = new floatCin.length]: for(int i = 0; i < in.length, i++)

resultti] = inti]; return result;

public static doublet] primitive(Double[] in) { doublet] result = new double[in.length]; for(int i = 0; i < in.length; i++)

result[i] = in[i]; return result;

}

} /// ~

Каждая версия 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).

Поделиться:
Популярные книги

Укрощение огня

Ринго Джон
1. Консульские войны
Фантастика:
фэнтези
7.00
рейтинг книги
Укрощение огня

Том 4. Повести и рассказы, статьи 1844-1854

Тургенев Иван Сергеевич
4. Собрание сочинений в двенадцати томах
Проза:
русская классическая проза
5.00
рейтинг книги
Том 4. Повести и рассказы, статьи 1844-1854

Обитатели холмов

Адамс Ричард
1. Обитатели холмов
Фантастика:
фэнтези
8.78
рейтинг книги
Обитатели холмов

Эволюционер из трущоб. Том 10

Панарин Антон
10. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 10

Полуденный бриз

Самылов Алексей Леонидович
4. Эриминум
Фантастика:
фэнтези
6.83
рейтинг книги
Полуденный бриз

Князь Андер Арес 3

Грехов Тимофей
3. Андер Арес
Фантастика:
рпг
аниме
фэнтези
5.00
рейтинг книги
Князь Андер Арес 3

Цикл романов "Все секреты мира"

Берри Стив
Детективы:
триллеры
крутой детектив
5.00
рейтинг книги
Цикл романов Все секреты мира

Божественная комедия (илл. Доре)

Алигьери Данте
Старинная литература:
европейская старинная литература
7.62
рейтинг книги
Божественная комедия (илл. Доре)

Интернет-журнал "Домашняя лаборатория", 2008 №2

Журнал «Домашняя лаборатория»
Дом и Семья:
хобби и ремесла
сделай сам
5.00
рейтинг книги
Интернет-журнал Домашняя лаборатория, 2008 №2

Газлайтер. Том 18

Володин Григорий Григорьевич
18. История Телепата
Фантастика:
попаданцы
аниме
фэнтези
6.80
рейтинг книги
Газлайтер. Том 18

Цена предательства

Тамоников Александр
Спецназ
Детективы:
боевики
7.86
рейтинг книги
Цена предательства

"Охотник". Компиляция. Книги 1-12

Усманов Хайдарали
Собрание сочинений
Фантастика:
боевая фантастика
5.00
рейтинг книги
Охотник. Компиляция. Книги 1-12

Скрытая Империя

Андерсон Кевин Джей
1. Сага Семи Солнц
Фантастика:
научная фантастика
6.25
рейтинг книги
Скрытая Империя

Двадцать и двадцать один. Наивность

Das_Leben
Детективы:
триллеры
5.00
рейтинг книги
Двадцать и двадцать один. Наивность