Реверс массива в Java
Чтобы изменить массив, поменять местами первый элемент с последним элементом и второй элементом со вторым последним элементом, и так далее, если массив имеет нечетную длину оставить средний элемент, как есть.
Вкратце поменяйте местами 1-й элемент с 1-м элементом из последнего, второй элемент со вторым элементом из последнего, т.е. i-й элемент с i-м элементом из последнего, вам нужно сделать это до достижения средней точки массива.
Если i – первый элемент массива (length of the array –i-1) будет последним элементом, следовательно, поменять array[i] на массив [(length of the array –i-1)] от начала до средняя точка массива:
Пример реверса массива Java
Средняя оценка 3.7 / 5. Количество голосов: 18
Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.
Или поделись статьей
Видим, что вы не нашли ответ на свой вопрос.
Помогите улучшить статью.
Напишите комментарий, что можно добавить к статье, какой информации не хватает.
Как поменять элементы массива в обратном порядке в Java
Напишите программу, которая меняет местами элементы одномерного массива из String в обратном порядке. Не используйте дополнительный массив для хранения результатов.
Решение:
Комментарии к задаче:
В результате выполнения этого кода получим перевернутый массив: вместо «Каждый охотник желает знать где сидит фазан» — «фазан сидит где знать желает охотник Каждый «

Как была решена задача? Основная ее часть — это фрагмент:
Он по очереди меняет местами противоположные элементы массива, используя как посредника дополнительную переменную String temp (temp — от temporary, «временный»). Можно было бы обойтись и без нее, если бы массив хранил переменные числового типа.
Тут есть a[i] и малопонятное a[n-i-1]. Но на самом деле n-i-1 это просто формула для определения «противоположного» элемента массива:

Если бы мы имели массив, который бы состоял из элементов a, b, c, d, e и f, то есть массив из 6 элементов (n=6), «противоположным» (то есть элементом a[n-i-1]) для каждого из них были бы f для a, e для b и d для c. Цикл из фрагмента кода выполнялся бы три раза, до элемента d (i=0, 1, 2). Граница выполнения массива показана оранжевой линией на рисунке.
Так, обратите внимание, что мы не должны проходить циклом весь массив, чтобы поменять его элементы местами.
Надеемся — наша статья была Вам полезна. Есть возможность записаться на наши курсы по Java. Детальную информацию смотрите у нас на сайте.
Эффективная замена элементов массива в Java
Мне интересно, есть ли более эффективный способ замены двух элементов в массиве, чем что-то вроде этого:
Ну, это явно не плохо или даже неправильно, но мне нужно часто меняться, поэтому мне интересно, есть ли какие-либо Libs или что-то, что обеспечивает более эффективный способ сделать это?
8 ответов
Неа. У вас может быть функция, позволяющая сделать ее более кратким в каждом месте, где вы ее используете, но в итоге работа была бы одинаковой (плюс накладные расходы на вызов функции до тех пор, пока HotSpot не переместил ее inline — с этим сделаем functon static final ).
Это должно сделать его бесшовным:
Если вы хотите поменять строку. это уже эффективный способ сделать это.
Однако, если вы хотите поменять целое число, вы можете использовать XOR для более эффективного обмена двумя целыми числами:
Если вы меняете номера и хотите получить сжатый способ написать код, не создавая отдельную функцию или используя запутанный хакер XOR, я считаю, что это намного проще понять, и это также один лайнер.
То, что я видел в некоторых примитивных тестах, заключается в том, что разница в производительности в целом также незначительна.
Используйте Collections.swap и Arrays.asList :
Невероятно поздно для вечеринки (мои извинения), но может быть реализовано более общее решение, чем предоставленные здесь (будет работать как с примитивами, так и с не примитивами):
Вы теряете безопасность во время компиляции, но это должно сделать трюк.
Примечание I: вы получите NullPointerException , если данный array равен null , a IllegalArgumentException , если данный array не является массивом, а ArrayIndexOutOfBoundsException , если любой из индексов недействительны для данного array .
Примечание II. Для этого для каждого типа массива ( Object[] и всех примитивных типов) существуют отдельные методы, которые будут более эффективными (используя другие подходы, приведенные здесь), поскольку для этого требуется некоторый бокс/распаковка. Но также было бы намного больше кода для написания/поддержки.
Эффективная замена элементов массива в Java
Мне интересно, есть ли более эффективный способ поменять местами два элемента в массиве, чем делать что-то вроде этого:
Что ж, это, очевидно, неплохо или даже неправильно, но мне нужно очень часто менять местами, поэтому меня интересует, есть ли какие-либо библиотеки или что-то, что обеспечивает более эффективный способ сделать это?
13 ответов
Неа. У вас может быть функция, чтобы сделать ее более краткой в каждом месте, где вы ее используете, но в конечном итоге проделанная работа будет такой же (плюс накладные расходы на вызов функции, пока / если HotSpot не переместит ее внутрь — чтобы помочь ей с этим , сделайте функцию static final ).
Это должно сделать его бесшовным:
Если вы меняете местами числа и хотите краткий способ написания кода без создания отдельной функции или использования запутанного взлома XOR, я считаю, что это намного легче понять, и это также один лайнер.
Что я видел из некоторых примитивных тестов, так это то, что разница в производительности также в основном незначительна.
Это один из стандартных способов замены элементов массива без использования временной переменной, по крайней мере, для целых чисел.
Если вы хотите поменять местами строку. это уже эффективный способ сделать это.
Однако, если вы хотите поменять местами целое число, вы можете использовать XOR для более эффективного обмена двумя целыми числами следующим образом:
Используйте Collections.swap и Arrays.asList :
Невероятно поздно для вечеринки (мои извинения), но может быть реализовано более общее решение, чем те, которые представлены здесь (будет работать как с примитивами, так и с непримитивами):
Вы теряете безопасность во время компиляции, но это должно помочь.
Примечание I. Вы получите NullPointerException , если заданное array равно null , IllegalArgumentException , если заданное array равно не массив и ArrayIndexOutOfBoundsException , если какой-либо из индексов недействителен для данного array .
Примечание II: наличие отдельных методов для каждого типа массива ( Object[] и всех примитивных типов) было бы более производительным (с использованием других подходов, приведенных здесь), поскольку для этого требуется некоторая упаковка / распаковка. Но также нужно было бы писать / поддерживать намного больше кода.