| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > массив элементов типа ArrayList<Point> |
| Автор: Mirkes 10.3.2012, 06:56 | ||
| Пытаюсь создать массив известной длины, каждый элемент которого ArrayList<Point>. При описании все нормально, а вот при попытке инициализировать
получаю ошибку "Error(68,21): generic array creation" Честно говоря пытался ставить круглые скобки в разные места - не помогает. Потом понял, что и не должно помогать. Как создать такой массив? |
| Автор: Stolzen 10.3.2012, 08:54 | ||||
| Используйте List, а не массив. Почему лучше делать так, и почему создание массива-генерика приводит к ошибке, можно почитать у J. Bloch в Effective Java 2nd edition, item 25.
Если просто невыносимо хочется создать такой массив, делайте это так:
|
| Автор: dorogoyIV 10.3.2012, 10:17 |
не согласен! низкоуровневые массивы эффективнее высокоуровневых коллекций. |
| Автор: dorogoyIV 10.3.2012, 10:34 | ||
| для топикстартера: т.к. коллекция динамическая, лучше использовать Vector - он быстрее, и он синхронизирован
|
| Автор: jk1 10.3.2012, 10:43 | ||||
При условии что руки у программиста достаточно прямые.
Можно пруфлинк? |
| Автор: dorogoyIV 10.3.2012, 10:47 |
| jk1, вот тут я немного в ступоре... заметь слово "известной" тогда зачем ArrayList ?!!! |
| Автор: dorogoyIV 10.3.2012, 11:23 | ||||
насчет скорости щас лень разбираться, но я помню, что, вектор всегда был быстрее... а насчет синхронизации вот исходники: Vector:
ArrayList:
|
| Автор: jk1 10.3.2012, 13:45 | ||||
Здесь Вы конечно правы.
Синхронизация конечно сегодня дешевая, но чтобы синхронизированный код был заметно быстрее несинхронизированного - в это верится с трудом. Да и http://www.javacodegeeks.com/2010/08/java-best-practices-vector-arraylist.html показывают примерное равенство по скорости, разве что итератор у вектора заметно медленнее. Я уже не говорю о том, что преждевременная оптимизация по скорости - вообще зло. |
| Автор: dorogoyIV 10.3.2012, 14:26 |
| jk1, если взять все в совокупности, в итоге выиграет все равно вектор. а ты молодец! если бы не ты, я бы не полез в исходники... спасибо тебе!!!... Добавлено через 5 минут и 49 секунд jk1, ты сам прекрасно знаешь - всегда вектор будет быстрее чем аррэйлист! хватит мне уже тут мозг долбить... |
| Автор: Mirkes 10.3.2012, 17:30 | ||||||
Вообще-то я создавал массив известной длинны, состоящий из массивов неизвестной заранее длины.
Достаточно прямые. Более того, после формирования всех ArrayList'ов я потом трансформирую все в массивы.
Спасибо большое, теперь понял почему была ошибка. Пришлось использовать ArrayList<ArrayList<Point>>, все работает. |
| Автор: Shaggie 10.3.2012, 18:12 |
Ох ничего себе, а мужики-то не знают. Оказывается, синхронизированный код быстрее того, который написан без заморачивания на корректную работу в многопоточной среде. Вот только в реальности вектором в современной джаве никто не пользуется. Отдельная сущность не нужна, ArrayList быстрее, а в случае многопоточной работы его можно обернуть в synchronized или воспользоваться специальным примитивом под задачу. |