Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > массив с неизвестной длинной в java


Автор: NLspieler 22.2.2010, 03:21
Какого было моё разочарования, когда я узнал, что
массивы в java мало того, что имеют только нумерованные 0...n ключи,
так еще и имеют фиксированную длину n.
Про то, что они не могут быть многомерными, я вообще молчу.

Сразу зафиксировать всю необходимую для исполнения программы память - это конечно же очень хорошо и экономно. 
Но в очень большом количестве задач, совершенно неизвестно, сколько элементов будет у нашего бедующего массива.

Например, представим такую задачу, пользователь вводит в консоле имена и возраста, 
после каждого ввода имени, программа спрашивает, хочет ли пользователь ввести
еще одно имя, или завершить ввод, и вывести все введенные имена.

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

String [] name = new String [неизвестная длинна] ;
int [] how_old = new int [неизвестная длинна] ;

Но как сделать массив с неопределенной длинной так до сих пор для меня остаётся загадкой.


Следующий вопрос, можно ли в java-массив засунуть дерево?
В таких языках как javascript или php это не составляет никакого труда. 
В JAVе же никаких очевидных способов мне пока не видно.


Как java-программисты справляются с такими серьёзными проблемами?

Автор: Vasay 22.2.2010, 03:43
Цитата

Про то, что они не могут быть многомерными, я вообще молчу.


Могут.

Код

        String[][] names = {{"Mr. ", "Mrs. ", "Ms. "}, {"Smith", "Jones"}};


Цитата

массивы в java мало того, что имеют только нумерованные 0...n ключи,


На то они и массивы.

Кроме массивов в Java есть
-HashMap
-TreeMap
-Collections 

Автор: Exai1e 22.2.2010, 09:24
Цитата(NLspieler @  22.2.2010,  03:21 Найти цитируемый пост)

Как java-программисты справляются с такими серьёзными проблемами?

использовать List<T>

Автор: batigoal 22.2.2010, 11:48
NLspieler, коллекции в Java представлены достаточно обширно, как в стандартном API, так и в сторонних либах. Кури мануал: http://java.sun.com/docs/books/tutorial/collections/index.html

Автор: Fieral 22.2.2010, 18:11
http://java.sun.com/j2se/1.5.0/docs/api/java/util/Vector.html

Автор: dorogoyIV 22.2.2010, 21:41
Цитата(NLspieler @  22.2.2010,  03:21 Найти цитируемый пост)
Какого было моё разочарования

 smile  прикольно, у меня совершенно обратное мнение  smile 
джава написана на ошибках первых языков программирования, там все путем...
мануал совершенно понятный (по крайней мере для меня)
мне вот щас приходится на бейсике писать, так я в шоке от бейсика после джавы  smile 

Автор: LSD 23.2.2010, 14:31
Цитата(NLspieler @  22.2.2010,  03:21 Найти цитируемый пост)
Как java-программисты справляются с такими серьёзными проблемами?

Читают http://base.vingrad.ru/Kollektsii-1034, книги, гугл прежде чем задавать дурацкие вопросы.

Автор: NLspieler 23.2.2010, 17:54
Спасибо всем за помощь.
Я уж и правда думал, что все это в java нереализуемо, 
или реализуемо, но с массой сложностей и переподвыпертов,

оказалось, что я не прав и все это совсем не сложно и давно уже предусмотренно

Автор: Temdegon 5.3.2010, 02:08
Все непонятки из-за того, что в php принято называть массивом то, что правильнее было бы назвать коллекцией =)
Кста, может кто-то натыкался на какие-нить статьи про то, как в php устроен array и строки? К примеру, является ли строка в PHP изменяемой? Как сильно реализация отличается от джавовской String? Ну а про "чудо-массив", в который можно пихать все что хочешь, тоже хотелось бы узнать всякие подробности. Должна же быть какая-то плата за его универсальность. Сколько не гуглил и спрашивал у знакомых программистов, все только плечами пожимают. А в исходниках рыться, что бы с этим разобраться, как то не очень хочется...

Автор: MaxPayneC 5.3.2010, 02:55
В
Код

List list = new ArrayList();

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

Автор: batigoal 5.3.2010, 08:29
Цитата(Temdegon @  5.3.2010,  03:08 Найти цитируемый пост)
Ну а про "чудо-массив", в который можно пихать все что хочешь, тоже хотелось бы узнать всякие подробности.

А зачем?

Автор: _Y_ 5.3.2010, 09:13
Цитата(batigoal @ 5.3.2010,  08:29)
Цитата(Temdegon @  5.3.2010,  03:08 Найти цитируемый пост)
"чудо-массив", в который можно пихать все что хочешь

А зачем?

Как зачем? Ну, например, создать мусорный ящик (Recycle Bin). В игрушке какой-нибудь, или еще где.

Кстати, раз уж говорим о вещах простых, следует напомнить, что именно для сабжа и существует ArrayList


Автор: serger 5.3.2010, 10:55
Цитата(Temdegon @  5.3.2010,  04:08 Найти цитируемый пост)
Кста, может кто-то натыкался на какие-нить статьи про то, как в php устроен array и строки? К примеру, является ли строка в PHP изменяемой? Как сильно реализация отличается от джавовской String? 

Цитата(Temdegon @  5.3.2010,  04:08 Найти цитируемый пост)
Сколько не гуглил и спрашивал у знакомых программистов, все только плечами пожимают.

Просто уровень разработчиков не торт..  smile 

Автор: batigoal 5.3.2010, 11:38
Цитата(_Y_ @  5.3.2010,  10:13 Найти цитируемый пост)
Как зачем? Ну, например, создать мусорный ящик (Recycle Bin). В игрушке какой-нибудь, или еще где.

Пример хороший, согласен с ним. Но в реальной разработке, ну вот ни разу не было у меня необходимости создавать универсальный массив, практически всегда его можно параметризовать. Имхо, в 90% случаев использование коллекций с непараметризованным типом в прикладном программировании есть недочет дизайна.

Автор: _Y_ 5.3.2010, 11:44
Цитата(batigoal @ 5.3.2010,  11:38)
Цитата(_Y_ @  5.3.2010,  10:13 Найти цитируемый пост)
...мусорный ящик...

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

Абсолюто согласен. Так что, начинающие, обратите внимание:
использование коллекций с непараметризованным типом есть недочет 

Автор: ravivc 28.9.2020, 17:27
Думаю этот материал о массивах https://javarush.ru/groups/posts/massivy-java даст ответы на многие вопросы)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)