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


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

Автор: jManiak 31.8.2012, 14:38
Ну собственно есть метод Arrays.fill(...). но внутри он все равно делает 
Код

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


так что это просто упрощает написание.

Автор: dorogoyIV 31.8.2012, 15:31
не знаком с паскаль, но пока не вижу разницы!
надо узнать 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';

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

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

Автор: dorogoyIV 31.8.2012, 16:44
дело в том, что, джава сначала проверяет - на какой OS работаем... (кроссплатформенность однако)
зато можно прямо с флешки запустить прогу джава.
даже если джава не установлена на компе.
ну и отсюда тормоза... - пока проверим, что за OS, пока загрузим виртуальную машину, потом уже начнем обращаться к машинному коду... ;)

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

Автор: math64 1.9.2012, 21:56
Зато есть нативная arraycopy();
Код

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

вероятно будет быстрее Arrays.fill();

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