Ответ 1
Вы можете использовать
JDK > 1,5
Arrays.copyOfRange(Object[] src, int from, int to)
JDK <= 1,5
System.arraycopy(Object[] src, int srcStartIndex, Object[] dest, int dstStartIndex, int lengthOfCopiedIndices);
Как создать под-массив из другого массива? Есть ли метод, который принимает индексы из первого массива, такие как:
methodName(object array, int start, int end)
Я не хочу переходить к созданию циклов и затруднять мою программу.
Я продолжаю получать ошибку:
не удается найти метод символа copyOfRange (int [], int, int)
Это мой код:
import java.util.*;
public class testing
{
public static void main(String [] arg)
{
int[] src = new int[] {1, 2, 3, 4, 5};
int b1[] = Arrays.copyOfRange(src, 0, 2);
}
}
Вы можете использовать
Arrays.copyOfRange(Object[] src, int from, int to)
System.arraycopy(Object[] src, int srcStartIndex, Object[] dest, int dstStartIndex, int lengthOfCopiedIndices);
Arrays.copyOfRange(..)
был добавлен в Java 1.6. Так что, возможно, у вас нет последней версии. Если обновление невозможно, просмотрите System.arraycopy(..)
Использовать метод copyOfRange из класса java.util.Arrays:
int[] newArray = Arrays.copyOfRange(oldArray, startIndex, endIndex);
Подробнее:
Да, он называется System.arraycopy(Object, int, Object, int, int).
По-прежнему будет выполняться цикл где-нибудь, хотя это может быть оптимизировано JT (например, REP STOSW
), в этом случае цикл находится внутри ЦП.
int[] src = new int[] {1, 2, 3, 4, 5};
int[] dst = new int[3];
System.arraycopy(src, 1, dst, 0, 3); // Copies 2, 3, 4 into dst
Использование Apache ArrayUtils можно загрузить на эту ссылку вы можете легко использовать метод
subarray(boolean[] array, int startIndexInclusive, int endIndexExclusive)
"boolean" - только пример, существуют методы для всех примитивов java types
int newArrayLength = 30;
int[] newArray = new int[newArrayLength];
System.arrayCopy(oldArray, 0, newArray, 0, newArray.length);
Код верен, поэтому я предполагаю, что вы используете старый JDK. В javadoc для этого метода указано, что он существует с 1.6. В командной строке введите:
java -version
Я предполагаю, что вы не используете 1.6
Я использую java до версии 1.6 вместо System.arraycopy()
. Или обновите среду.
JDK> = 1,8
Я согласен со всеми ответами выше. Есть также хороший способ с Java 8 Streams:
int[] subArr = IntStream.range(startInclusive, endExclusive)
.map(i -> src[i])
.toArray();
Преимущество этого заключается в том, что он может быть полезен для множества различных типов массивов "src" и помогает улучшить операции записи конвейера в потоке.
Не конкретно об этом вопросе, но, например, если исходный массив был double
и мы хотели взять average()
подмассива:
double avg = IntStream.range(startInclusive, endExclusive)
.mapToDouble(index -> src[index])
.average()
.getAsDouble();