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

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

Жанры

Философия Java3

Эккель Брюс

Шрифт:

Векторы массивов, образующих матрицу, могут иметь разную длину (это называется ступенчатым массивом):

//: arrays/RaggedArray java import java util *;

public class RaggedArray {

public static void main(Stnng[] args) { Random rand = new Random(47), // Трехмерный массив с векторами переменной длины int[][][] а = new int[гаnd.nextInt(7)][][]; for(int i =0. i < a length. i++) {

a[i] = new int[rand nextlnt(5)][]. for(int j = 0. j < a[i] length. j++)

a[i][j] = new int[rand nextlnt(5)].

}

System.out println(Arrays deepToString(a)),

}

} /* Output-

[[]. [[0]. [0]. [0. 0. 0. 0]]. [[]. [0. 0]. [0. 0]]. [[0. 0. 0]. [0]. [0. 0. 0. 0]]. [[0. 0. 0], [0. 0. 0]. [0]. []]. [[0]. []. [0]]] */// ~

Первая

конструкция new создает массив, у которого первый элемент имеет случайную длину, а остальные остаются неопределенными. Вторая конструкция new в цикле for заполняет элементы, но оставляет третий индекс неопределенным вплоть до выполнения третьего new.

Массивы с не-примитивными элементами заполняются аналогичным образом. Пример объединения нескольких выражений new в фигурных скобках:

//• arrays/MultidimensionalObjectArrays java import java.util *;

public class MultidimensionalObjectArrays { public static void main(String[] args) { BerylliumSphere[][] spheres = {

{ new Beryl liumSphereO, new Beryl liumSphereO }. { new Beryl 1 iumSphereO, new Beryl 1 iumSphereO .

new Beryl liumSphereO. new Beryl liumSphereO }, { new Beryl liumSphereO. new Beryl liumSphereO.

new Beryl li umSphereO. new Beryl liumSphereO , new BerylliumSphereO, new Beryl 1iumSphere. new Beryl liumSphereO. new Beryl liumSphereO }.

}:

System out.printin(Arrays.deepToStri ng(spheres));

}

} /* Output:

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

Массив spheres также является ступенчатым, то есть длины вложенных списков объектов различаются.

Механизм автоматической упаковки работает с инициализаторами массивов:

//• arrays/AutoboxingArrays.java import java util *.

public class AutoboxingArrays {

public static void main(String[] args) {

Integer[][] a = { // Автоматическая упаковка

{ 1, 2. 3. 4, 5, 6. 7. 8, 9, 10 }, продолжение #

{ 21. 22, 23, 24, 25, 26. 27. 28. 29. 30 }. { 51. 52. 53. 54, 55. 56. 57. 58. 59. 60 }. { 71. 72. 73. 74, 75. 76. 77. 78. 79. 80 }.

}.

System.out.pri ntlл(Arrays.deepToStri ng(a));

}

} /* Output-

[[1. 2, 3. 4. 5. 6. 7. 8. 9. 10]. [21. 22. 23. 24. 25. 26. 27. 28. 29. 30]. [51. 52. 53.

54. 55. 56. 57. 58. 59, 60], [71, 72, 73, 74. 75. 76. 77. 78. 79. 80]] *///-

А

вот как происходит поэлементное построение массива не-примитивных объектов:

//. arrays/AssemblingMultidimensionalArrays.java // Создание многомерных массивов import java util.*;

public class AssemblingMultidimensionalArrays { public static void main(String[] args) { Integer[][] a. a = new Integer[3][]; for(int i = 0; i < a.length; i++) { a[i] = new Integer[3], for(int j = 0; j < a[i] length; j++)

a[i][j] = i * j; // Автоматическая упаковка

}

System.out println(Arrays.deepToString(a));

}

} /* Output.

[[0, 0, 0]. [0. 1. 2]. [0. 2. 4]] *///:-

Выражение i*j присутствует только для того, чтобы поместить менее тривиальное значение в Integer.

Метод Arrays.deepToString работает как с массивами примитивных типов, так и с массивами объектов:

//: arrays/MultiDimWrapperArray.java // Multidimensional arrays of "wrapper" objects, import java util *;

public class MultiDimWrapperArray {

public static void main(Str*ing[] args) {

Integer[][] al = { // Автоматическая упаковка { 1. 2. 3. }. { 4. 5. 6, }.

}.

Double[][][] a2 = { // Автоматическая упаковка { { 1.1. 2 2 }. { 3 3. 4.4 } }. { { 5.5, 6.6 }. { 7.7, 8 8}}, { { 9.9, 1 2 }. { 2.3, 3 4}},

}.

string:::: аз = {

{ "The", "Quick", "Sly", "Fox" }, { "Jumped". "Over" }.

{ "The". "Lazy". "Brown", "Dog", "and", "friend" },

System.out.printiл("al: " + Arrays.deepToString(al)): System.out.printiл("a2: " + Arrays.deepToString(a2)): System.out.printin("a3: " + Arrays.deepToString(a3)):

}

} /* Output:

al: [[1. 2. 3], [4. 5. 6]]

a2: [[[1.1. 2.2], [3.3. 4.4]]. [[5.5. 6.6], [7.7. 8.8]]. [[9.9. 1.2]. [2.3. 3.4]]] a3: [[The, Quick. Sly. Fox], [Jumped, Over], [The. Lazy. Brown. Dog. and. friend]] *///:-

И снова в массивах Integer и Double механизм автоматической упаковки Java SE5 создает необходимые объекты-«обертки».

Массивы и параметризация

В общем случае массивы и параметризация плохо сочетаются друг с другом. Например, массивы не могут инициализироваться параметризованными типами:

Peel<Banana>[] peels = new Peel<Banana>[10]: II He разрешено

Стирание удаляет информацию о параметре типа, а массив должен знать точный тип хранящихся в нем объектов для обеспечения безопасности типов. Впрочем, параметризовать можно сам тип массива:

//: arrays/ParameterizedArrayType.java

class ClassParameter<T> {

public T[] f(T[] arg) { return arg: }

}

class MethodParameter {

public static <T> T[] f(T[] arg) { return arg; }

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

Свадьба по приказу, или Моя непокорная княжна

Чернованова Валерия Михайловна
Любовные романы:
любовно-фантастические романы
5.57
рейтинг книги
Свадьба по приказу, или Моя непокорная княжна

Сборник коротких эротических рассказов

Коллектив авторов
Любовные романы:
эро литература
love action
7.25
рейтинг книги
Сборник коротких эротических рассказов

Отец моего жениха

Салах Алайна
Любовные романы:
современные любовные романы
7.79
рейтинг книги
Отец моего жениха

Вадбольский

Никитин Юрий Александрович
1. Вадбольский
Фантастика:
попаданцы
5.00
рейтинг книги
Вадбольский

Бастард Императора. Том 7

Орлов Андрей Юрьевич
7. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 7

Повелитель механического легиона. Том VIII

Лисицин Евгений
8. Повелитель механического легиона
Фантастика:
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Повелитель механического легиона. Том VIII

В зоне особого внимания

Иванов Дмитрий
12. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
В зоне особого внимания

Таня Гроттер и магический контрабас

Емец Дмитрий Александрович
1. Таня Гроттер
Фантастика:
фэнтези
8.52
рейтинг книги
Таня Гроттер и магический контрабас

Бастард Императора. Том 2

Орлов Андрей Юрьевич
2. Бастард Императора
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бастард Императора. Том 2

Кодекс Крови. Книга ХI

Борзых М.
11. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХI

Третий

INDIGO
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий

Возвышение Меркурия. Книга 16

Кронос Александр
16. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 16

Идеальный мир для Лекаря 9

Сапфир Олег
9. Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
6.00
рейтинг книги
Идеальный мир для Лекаря 9

Потусторонний. Книга 1

Погуляй Юрий Александрович
1. Господин Артемьев
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Потусторонний. Книга 1