List<Integer>[]
От: server_mouse Беларусь about:blank
Дата: 25.10.07 12:52
Оценка:
Господа,
Возникла надобность иметь матрицу расширяемую в одном измерении (в ширину, т.е. кол-во строк неизменно, кол-во столбцов динамично).
Собственно максимально простой подход который я увидел звучит как "массив листов" или так:
List[] a=new List[10];


Работает чудесно. Матрица заполняется, нормализуется и вот оно счастье.
Но нетипизированый лист не есть хорошо. Типизируем его:
List<Integer>[] a=new List<Integer>[10];

И что я имею? Ошибку компиляции! При том что само объявление, без инициализации
List<Integer>[] a;

компилируется!

Собственно понимаю, что конструкция выглядит диковато. Тем не менее, как её проинициализировать?
Пока юзаю извращение в виде
List<List<Integer>>
Повреждение мозга после ректальной биопсии — редкая штука (с) Хаус
Re: List<Integer>[]
От: vsb Казахстан  
Дата: 25.10.07 13:30
Оценка:
Здравствуйте, server_mouse, Вы писали:

А если так:
List<Integer>[] a = new List[10];
Re: List<Integer>[]
От: LeonidV Ниоткуда http://vygovskiy.com
Дата: 25.10.07 13:36
Оценка:
Я думаю, не получится создать массив из типизированных типов. Вроде какие-то проблемы с безопасностью. Хотя, может и не прав.
http://jvmmemory.com — простой способ настройки JVM
Re[2]: List<Integer>[]
От: LeonidV Ниоткуда http://vygovskiy.com
Дата: 25.10.07 13:44
Оценка: 2 (1)
Подтверждение выше сказаному есть в generic-tutorial у Sun:
http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf

7.3 Arrays
The component type of an array object may not be a type variable or a parameterized
type, unless it is an (unbounded) wildcard type.You can declare array types whose
element type is a type variable or a parameterized type, but not array objects.


Но если очень хочется и java 6, то вроде тут описано как это сделать:
http://forum.java.sun.com/thread.jspa?threadID=651276&amp;messageID=3832182
Либо еще есть один способ, но сейчас не помню, как. Что-то через рефлексию вроде. Тоже только в 1.6 появился.
http://jvmmemory.com — простой способ настройки JVM
Re[3]: List<Integer>[]
От: LeonidV Ниоткуда http://vygovskiy.com
Дата: 25.10.07 13:51
Оценка:
Здравствуйте, LeonidV, Вы писали:
LV>Либо еще есть один способ, но сейчас не помню, как. Что-то через рефлексию вроде. Тоже только в 1.6 появился.
А вот здесь и он описан:
http://tech.puredanger.com/2007/02/27/generics-array-construction/ (где-то в середине есть решение).
http://jvmmemory.com — простой способ настройки JVM
Re: List<Integer>[]
От: denis.zhdanov Россия http://denis-zhdanov.blogspot.com/
Дата: 25.10.07 14:06
Оценка: 18 (1)
Здравствуйте, server_mouse, Вы писали:

_>Господа,

_>Возникла надобность иметь матрицу расширяемую в одном измерении (в ширину, т.е. кол-во строк неизменно, кол-во столбцов динамично).
_>...
List<Integer>[] a=new List<Integer>[10];

И что я имею? Ошибку компиляции! При том что само объявление, без инициализации

  1. нельзя писать new List();
  2. Can I create an array whose component type is a concrete parameterized type?;



_>Собственно понимаю, что конструкция выглядит диковато. Тем не менее, как её проинициализировать?

_>Пока юзаю извращение в виде
_>
_>List<List<Integer>>
_>


Зачем использовать коллекции для эмуляции массива? Я бы завел класс RowData и юзал бы Collection<RowData>.
http://denis-zhdanov.blogspot.com
Re[2]: List<Integer>[]
От: server_mouse Беларусь about:blank
Дата: 25.10.07 15:09
Оценка:
Здравствуйте, denis.zhdanov, Вы писали:

DZ>Зачем использовать коллекции для эмуляции массива? Я бы завел класс RowData и юзал бы Collection<RowData>.

Хотелось убежать от доп. класса чей функционал очевиден.
За совет спасибо конечно.
Повреждение мозга после ректальной биопсии — редкая штука (с) Хаус
Re: List<Integer>[]
От: Razumyan Россия  
Дата: 26.10.07 02:03
Оценка:
Здравствуйте, server_mouse, Вы писали:

_>Но нетипизированый лист не есть хорошо. Типизируем его:

_>
_>List<Integer>[] a=new List<Integer>[10];
_>


Ну можно же "инвертировать" логику — использовать не "массив листов", а "лист массивов":

List<Integer[]> a = new ArrayList<Integer[]>();
Re: List<Integer>[]
От: _Sserg_  
Дата: 26.10.07 04:46
Оценка:
Здравствуйте, server_mouse, Вы писали:

_>Господа,

_>Возникла надобность иметь матрицу расширяемую в одном измерении (в ширину, т.е. кол-во строк неизменно, кол-во столбцов динамично).
_>Собственно максимально простой подход который я увидел звучит как "массив листов"


        int[][] a = new int[3][];
        a[0] = new int[10];
        a[1] = new int[20];
        a[2] = new int[30];

не?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.