2012-03-20 5 views
0

Существует массив lut_addresses [] типа int. Существуют некоторые вычисления для переменной table_ptr, которая также является int и представляет новую базу массива. Теперь я хочу присвоить значения lut_addresses [] начиная с индекса table_ptr до последнего индекса в массив lut_addresses [], так что начальные значения до table_ptr удаляются, а значение в таблице_ptr присутствует в 0-м индексе lut_addresses []. Как я могу это сделать, не меняя lut_addresses на arraylist?Удалить часть массива в Java

Псевдо код:

A() 
{ 
    int lut_addresses[] = new int[2048]; 
    // assign values upto a cetain index 
    B(lut_addresses); 
}; 
B() 
{ 
    int table_ptr=0; 
    //calculate table_ptr; 
    // assign lut_addresses[] values from index table_ptr till (lut_addresses.length-1) 
} 
+0

, к которому должно быть назначены – developer

+0

Смотрите мои редактировать значения lut_addresses - 'System.arraycopy' является лучшим выбором для вас. –

ответ

4

Первое, что приходит на ум, будет использовать System.arraycopy.

Экземпляры массив из указанного исходного массива, начиная с указанной позиции , к указанной позиции назначения массива.

+0

Чтобы уточнить, каждый способ сделать это в Java будет эквивалентен копиям массива. Вы не можете напрямую манипулировать указателями на Java, как на C или C++. –

+0

@LouisWasserman: Я полностью согласен. – npinti

1

Вы можете либо

  • Используйте for цикл, который работает над нужными показателями, присваивая элементы по одному, или
  • Используйте метод System.arraycopy , который копирует заданное количество элементов, начиная с заданного смещения в одном массиве, до заданного смещения в другом массиве.

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

+0

Я, может быть, ошибаюсь, но этот метод не удалит элементы, и я получаю массив с правильными элементами до индекса 'lut_addresses.length-table_ptr-1', и оставшиеся элементы останутся такими, какими они были в их первоначальном месте. Например, если 'lut_addresses [] = [1,2,3,4,5,6,7,8,9,10}', я получу 'lut_addresses [] = {4,5,6,7,8, 9,10,8,9,10} ' –

+1

Вы меняете вопрос, мужик, это смешно. Раньше он говорил что-то о назначении части массива, а затем о копировании элементов, теперь речь идет об удалении части массива. Я выхожу. –

+0

Я пытаюсь что-то в своем проекте. Вот почему так много изменений. Надеюсь, ты не против –

1
for (int i = startIndex; i < 2048; i++) { 
    lut_addresses[i] = newValue; 
} 
+0

Я не видел никаких других массивов в вашем вопросе. Но вы можете просто разместить все, что хотите, вместо 'newValue'. Например, 'lut_addresses [i] = source [j]'. Разумеется, вам нужно также увеличивать 'j'. Но для этой задачи «System.arraycopy()» было бы более удобно. – AlexZam

0

Вы не можете изменить размер на массив однажды он выделяется, но вы можете сохранить в переменном размере «используемых» части (это близко к тому, что ArrayList делает внутренне). Итак, вы можете использовать System.arraycopy(), чтобы скопировать часть одного массива в другую и использовать новую переменную int, чтобы сохранить размер заполненной части. Затем, когда вы итерации, используйте эту переменную вместо lut_addresses.length как верхний предел итерации.

0

Я думаю, вы могли бы использовать IntBuffer. из документации:

Относительных объемные методы пут, которые передают непрерывные последовательности целых чисел из Int массива или какого-либо другого Int буфера в этот буфер

0

Там нет прямого метода, чтобы непосредственно получить указанный элемент как в ArrayList, так что вам нужно сначала выполнить цикл для поиска, а затем заменить каждый элемент после этого (index-indexex искомого элемента).

Смежные вопросы