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

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

Жанры

Философия 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; }

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

Чужое наследие

Кораблев Родион
3. Другая сторона
Фантастика:
боевая фантастика
8.47
рейтинг книги
Чужое наследие

Наследник, скрывающий свой Род

Тарс Элиан
2. Десять Принцев Российской Империи
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Наследник, скрывающий свой Род

Я снова князь. Книга XXIII

Дрейк Сириус
23. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я снова князь. Книга XXIII

Локки 5. Потомок бога

Решетов Евгений Валерьевич
5. Локки
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Локки 5. Потомок бога

Глубокий космос

Вайс Александр
9. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Глубокий космос

Надуй щеки!

Вишневский Сергей Викторович
1. Чеболь за партой
Фантастика:
попаданцы
дорама
5.00
рейтинг книги
Надуй щеки!

Московское золото и нежная попа комсомолки. Часть Пятая

Хренов Алексей
5. Летчик Леха
Фантастика:
попаданцы
5.00
рейтинг книги
Московское золото и нежная попа комсомолки. Часть Пятая

Дитя прибоя

Трофимов Ерофей
Дитя прибоя
Фантастика:
боевая фантастика
попаданцы
фэнтези
5.00
рейтинг книги
Дитя прибоя

Княжна попаданка. Последняя из рода

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

Печать мастера

Лисина Александра
6. Гибрид
Фантастика:
попаданцы
технофэнтези
аниме
фэнтези
6.00
рейтинг книги
Печать мастера

Офицер Красной Армии

Поселягин Владимир Геннадьевич
2. Командир Красной Армии
Фантастика:
попаданцы
8.51
рейтинг книги
Офицер Красной Армии

Локки 6. Потомок бога

Решетов Евгений Валерьевич
6. Локки
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Локки 6. Потомок бога

На границе империй. Том 10. Часть 4

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 4

Барон запрещает правила

Ренгач Евгений
9. Закон сильного
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Барон запрещает правила