Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Существует ли возможность бысто заплнить массив 1й, аналог fillchar из Дельфи 
V
    Опции темы
Mirkes
Дата 31.8.2012, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 7
Всего: 17



Опять странный вопрос. Нужно заполнить большой массив одинаковым значением. Существует ли в Java такой метод? Типа паскалевского FillChar? Жутко надоело писать для этого циклы, которые к тому же медленно работают. Подскажите пожалуйста.


--------------------
Mirkes
PM MAIL   Вверх
jManiak
Дата 31.8.2012, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 6.2.2007
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Ну собственно есть метод Arrays.fill(...). но внутри он все равно делает 
Код

    public static void fill(int[] a, int val) {
        for (int i = 0, len = a.length; i < len; i++)
            a[i] = val;
    }


так что это просто упрощает написание.
PM MAIL ICQ   Вверх
dorogoyIV
Дата 31.8.2012, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 3
Всего: 46



не знаком с паскаль, но пока не вижу разницы!
надо узнать Count, потом вызвать процедуру...
(по первой попавшейся ссылке)
Цитата

Объявление: 

Procedure FillChar(Var X; Count : Word; Value);
Описание: 

 Заполняет определенное количество (Count) непрерывных байт определенным значением (типа Byte или Char). 
Замечания: 

 X - буфер, который нужно заполнить
 Count - количество символов
 Value - заполнитель (типа Byte или Char)

 Эта функция не выполняет проверки диапазона. 
Пример: 

 { Пример программы для процедуры FillChar }
 Var S : String[80];
 Begin
 { Заполняем строку пробелами }
 FillChar(S, SizeOf(S), ' ');
 S[0]:=#80; { Устанавливаем байт длины }
 End.


на джава:
Код

 char [] arr = new char [80];

 for(int i = 0; i < arr.length; i++)
  arr [i] = 'a';

PM MAIL   Вверх
Mirkes
Дата 31.8.2012, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 7
Всего: 17



Цитата(dorogoyIV @  31.8.2012,  15:31 Найти цитируемый пост)
не знаком с паскаль, но пока не вижу разницы!надо узнать Count, потом вызвать процедуру...

Разница в Паскале (ныне Дельфи) очень большая. FillChar никогда не перебирал элементы массива а на уровне машинных команд размножал фрагмент памяти. Так что разница в скорости была весьма ощутимой. Ну на на нет суда нет. Спасибо за консультацию.


--------------------
Mirkes
PM MAIL   Вверх
dorogoyIV
Дата 31.8.2012, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 3
Всего: 46



дело в том, что, джава сначала проверяет - на какой OS работаем... (кроссплатформенность однако)
зато можно прямо с флешки запустить прогу джава.
даже если джава не установлена на компе.
ну и отсюда тормоза... - пока проверим, что за OS, пока загрузим виртуальную машину, потом уже начнем обращаться к машинному коду... ;)
PM MAIL   Вверх
Stolzen
Дата 31.8.2012, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 23
Всего: 48



А вы уверены, что скорость работы Arrays.fill маленькая? 


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
math64
Дата 1.9.2012, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Зато есть нативная arraycopy();
Код

int[] array = new int[1000];
array[0] = 10;
System.arraycopy(array, 0, array, 1, array.length - 1);

вероятно будет быстрее Arrays.fill();
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0454 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.