Каков самый простой способ печати массива Java?
в Java массивы не переопределяют toString() , поэтому, если вы попытаетесь распечатать его напрямую, вы получите className + @ + hex hashCode массива, как определено Object.toString() :
но обычно мы на самом деле хотим чего-то большего, как [1, 2, 3, 4, 5] . Как это проще всего сделать? Вот несколько примеров входов и выходов:
30 ответов
начиная с Java 5, Вы можете использовать Arrays.toString(arr) или Arrays.deepToString(arr) для массивов в массивах. Обратите внимание, что Object[] версии вызовы .toString() для каждого объекта в массиве. Выход даже оформлен точно так, как вы просите.
Простой Массив:
Вложенный Массив:
double Массив:
int время:
всегда сначала проверяйте стандартные библиотеки. Попробуйте:
или если Ваш массив содержит другие массивы как элементы:
это приятно знать, однако, что касается «всегда сначала проверяйте стандартные библиотеки», я бы никогда не наткнулся на трюк Arrays.toString( myarray )
— так как я сосредоточился на типе myarray, чтобы увидеть, как это сделать. Я не хотел повторять это: я хотел, чтобы простой вызов вышел похожим на то, что я вижу в отладчике Eclipse и myarray.toString () просто не делал этого.
в JDK1.8 можно использовать агрегатные операции и лямбда-выражение:
Если вы используете Java 1.4, вы можете сделать вместо этого:
(это работает в 1.5+, конечно, тоже.)
начиная с Java 8, можно воспользоваться join() метод строковый класс чтобы распечатать элементы массива, без скобок и разделенные разделителем выбора (который является символом пробела для примера, показанного ниже):
выход будет » Эй, там amigo!».
Arrays.deepToString(arr) только печатает на одной строке.
чтобы на самом деле получить таблицу для печати в виде двумерной таблицы, я должен был сделать это:
кажется Arrays.deepToString(arr) метод должен принимать строку, разделитель, но, к сожалению, это не так.
массивы.метод toString
Java 8-Stream.соберите (joining ()), поток.по каждому элементу
ниже я пытаюсь перечислить некоторые из других предложенных методов, пытаясь немного улучшить, при этом наиболее заметным дополнением является использование Stream.collect оператор, используя а joining Collector , чтобы имитировать то, что String.join делает.
до Java 8, мы могли бы использовать Arrays.toString(array) для печати одномерного массива и Arrays.deepToString(array) для многомерных массивов. У нас есть возможность Stream и lambda в Java 8, который также может использоваться для печати массива.
печать одномерного массива:
печать многомерного массива На всякий случай, если мы хотим напечатать многомерный массив, мы можем использовать Arrays.deepToString(array) as:
теперь нужно отметить, что метод Arrays.stream(T[]) , что в случае int[] возвращает нас Stream<int[]> и затем методом flatMapToInt() сопоставляет каждый элемент потока с содержимым сопоставленного потока, полученного путем применения предоставленной функции сопоставления к каждому элемент.
различные способы печати массивов в Java:
используя toString()
печать массива массивов
Выход: [[Ljava.ленг.String;@1ad086a [[Ljava.ленг.Строка;@10385c1, [Ljava.ленг.String;@42719c] [[пятый, шестой], [седьмой, восьмой]]
через обычный на loop-самый простой способ печати массива, на мой взгляд. Здесь у вас есть пример кода на основе вашего intArray
Он дает выход как ваш 1, 2, 3, 4, 5
я наткнулся на этот пост в Ваниль #Java недавно. Это не очень удобно писать!—2—>, затем импортировать java.util.Arrays; все время.
обратите внимание, что это не постоянное исправление любыми средствами. Просто хак, который может сделать отладку проще.
печать массива непосредственно дает внутреннее представление и хэш-код. Теперь все классы Object как родительский тип. Так почему бы не взломать Object.toString() ? Без модификация, класс Object выглядит следующим образом:
что делать, если это изменено на:
этот модифицированный класс можно просто добавить в путь к классу, добавив в командную строку следующее: -Xbootclasspath/p:target/classes .
теперь, при наличии deepToString(..) начиная с Java 5, toString(..) можно легко изменить на deepToString(..) чтобы добавить поддержку массивов, содержащих другие массивы.
я нашел, что это довольно полезный Хак, и это было бы здорово если бы Java мог просто добавить это. Я понимаю потенциальные проблемы с наличием очень больших массивов, так как строковые представления могут быть проблематичными. Может пройти что-то вроде System.out или PrintWriter для таких случайностей.
он всегда должен работать в зависимости от версии JDK, которую вы используете:
это будет работать, если Array содержит объекты. Если Array содержит примитивные типы, вы можете использовать классы-оболочки вместо хранения примитива непосредственно как..
обновление :
да ! следует отметить, что преобразование массива в массив объектов или использование массива объекта дорого и может замедлить исполнение. это происходит по природе Ява называется автобоксинг.
так только для цели печатания, оно не должен быть использован. мы можем сделать функцию, которая принимает массив в качестве параметра и выводит нужный формат как
в java 8 это легко. есть два ключевых слова
-
стрим: Arrays.stream(intArray).forEach
ссылка на метод: ::println
если вы хотите распечатать все элементы массива в одной строке, просто используйте print вместо println то есть
Как распечатать массив на Java
В этом уроке мы напечатаем массивы на Java, используя методы toString() и Deept-string (), потоки для циклов и итераторов, с примерами и объяснениями!
- Автор записи
Вступление
Печать массива – это быстрый способ дать нам представление о значениях содержимого внутри. Иногда значения массива являются желаемым результатом работы программы.
В этой статье мы рассмотрим как печатать массив на Java четырьмя различными способами.
Хотя “лучший способ” зависит от того, что должна делать ваша программа, мы начнем с самого простого метода печати, а затем покажем более подробные способы его выполнения.
- Распечатайте массив с помощью Arrays.toString() и Arrays.deepToString()
- Печать массива с использованием потоков Java 8
- Печать массива путем преобразования в список
- Выведите массив с помощью циклов For
- Преобразование в список и Использование Итератора
Распечатайте массив с помощью Arrays.toString() и Arrays.deepToString()
Встроенный метод toString () -это чрезвычайно простой способ печати отформатированных версий объектов на Java.
Каждый тип данных в Java считается классом, и по умолчанию каждый класс наследуется от java.lang.Объект , корень иерархии классов Java. Вот почему у каждого класса есть метод toString () . Однако массивы не переопределяют метод toString() для удобного форматирования выходных данных, и он просто возвращает унаследованное значение, которое является хэшем объекта.
Мы печатаем массивы с помощью метода toString() из класса в java.util.Массивы .
Возьмем этот пример, где мы выводим значения массива целых чисел:
Приведенный выше код выведет следующее:
Обратите внимание, что все элементы разделены запятыми и заключены в квадратные скобки. Этот метод похож на визуальное представление массива.
Мы также можем использовать этот метод для печати массивов различных типов:
Это соответственно приводит к:
Метод toString() эффективен только для одномерных массивов. Когда у нас есть вложенные массивы, нам нужно использовать метод deepToString() :
Если вам нужно наглядное представление о том, что находится в вашем массиве с первого взгляда, методы toString() и deepToString () – ваш лучший вариант.
Однако эти методы не позволяют отформатировать вывод. Этот подход в основном является обходным путем для того факта, что массивы по умолчанию не переопределяют метод toString () .
Если вы предпочитаете некоторую гибкость в форматировании, вы можете рассмотреть возможность использования Java 8 потоков .
Печать массива с использованием потоков Java 8
Один из вариантов печати массива-преобразовать его в поток объектов, а затем распечатать каждый элемент в потоке. У нас есть несколько вариантов использования потоков для печати нашего массива.
Например, мы можем распечатать наш массив построчно следующим образом:
В этом случае мы используем метод static stream() класса Массивы для создания последовательного потока наших данных. Для каждого элемента в нашем потоке мы вызываем функцию println () , чтобы он отображался строка за строкой следующим образом:
Примечание: Мы ссылаемся на функцию println() следующим образом: System.out::println . :: в Java является оператором ссылки на метод. Функция forEach() может использовать либо лямбда – функцию , либо ссылку на метод .
В качестве альтернативы мы можем использовать класс Stream из java.util.stream.Stream для аналогичного вызова функции println() в потоке данных нашего массива. Мы можем построить поток этих данных, используя Stream.of() :
С помощью этого кода мы получим тот же результат:
Давайте попробуем это также с вложенными массивами, добавив даты выпуска начальных версий этих языков:
Вывод для каждой печати через потоки будет выглядеть примерно так:
Git Essentials
Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!
Это не очень хорошо работает… Мы снова вызываем println() для объектов массива. Нам придется снова транслировать эти объекты и печатать их элементы.
Для печати вложенных массивов мы можем использовать лямбда-выражение в функции forEach () , которое может перейти на второй уровень, создав еще один поток каждого уровня и распечатав записи таким образом:
Эта лямбда-функция выводит элементы в каждом вложенном массиве. При компиляции и выполнении мы получим этот результат:
Потоки облегчают работу с коллекциями. Но Java является гибкой, чтобы предоставить еще больше возможностей. Традиционный цикл for по-прежнему многое делает для нас. Давайте взглянем на печать массива с циклами.
Печать массива путем преобразования в список
Вы можете легко преобразовать массив Java в реализацию List . Существуют различные способы сделать это, и мы подробно рассмотрели каждый из них в нашем Как преобразовать массив Java в ArrayList статья.
Короче говоря, вызов toString () или просто распечатка (которая неявно вызывает toString() ) в Списке реализации, распечатает содержимое:
Кроме того, вы можете использовать .forEach() изначально в любой Коллекции , которой является Список . Так что вы можете просто пойти дальше и сделать то же самое:
Хотя это не очень хорошо отформатированный вариант:
Вы можете отказаться от ссылки на метод и просто использовать лямбду для большего контроля:
Выведите массив с помощью циклов For
Более известный подход к печати массива в Java заключается в использовании цикла для . С помощью цикла для мы получаем индекс элемента, и мы можем использовать индекс для получения элемента массива.
Мы настраиваем цикл для с переменной, обычно называемой i , в качестве счетчика, начинающегося с элемента 0 . Затем следует условие, которое сравнивает i с количеством элементов в массиве.
Примечание : Количество элементов в массиве, которые будут использоваться в состоянии цикла, никогда не должно быть жестко закодировано. Java предоставляет атрибут length , который позволяет программисту динамически вычислять количество элементов в массиве.
И последнее, но не менее важное: наш цикл для принимает инкрементное значение, в нашем случае мы будем использовать обозначение i++ , чтобы продолжать увеличивать наш счетчик на один элемент в каждой итерации.
Как только наш цикл будет полностью настроен и готов, мы просто используем оператор System.out.println() для отображения каждого элемента в массиве, используя обозначение в прямоугольных скобках [i] , используя в качестве входных данных наш счетчик i .
Вот пример, в котором мы выводим все элементы целочисленного массива строка за строкой:
При выполнении этого кода в вашей консоли будет выведено следующее:
Использовать для циклов не так уж много. Они довольно гибкие и концептуально просты. Например, если у вас были вложенные массивы, то вы будете использовать вложенные для циклов.
Наконец, давайте взглянем на итераторы и списки.
Преобразование в список и Использование Итератора
Объект итератора Java позволяет нам отображать каждый элемент вашего массива без использования индексного подхода, который мы рассмотрели в разделе для цикла.
Чтобы использовать итераторы, мы должны изменить тип данных массива на Список . Мы можем сделать это с помощью метода Array.asList() и сохранить значения списка, возвращенные в новой переменной. Метод asList() принимает массив и превращает его в реализацию List .
Затем вам понадобится объект итератора для настройки итератора массива. Итератор подобен указателю, указывающему на каждый элемент массива. Итератор помогает вам проверять каждый элемент особым образом.
Для создания объекта итератора мы будем использовать метод iterator() нашего Списка . Как только наш объект итератора был создан, мы используем цикл while , поскольку он предлагает более компактный способ печати каждого элемента, возвращаемого итератором.
Условие цикла while будет содержать вызов метода hasNext() нашего итератора. Внутри цикла while мы печатаем каждый элемент, вызывая System.out.println() . Мы получаем элементы из итератора, вызывая метод next () . Цикл while будет повторяться над каждым элементом до тех пор, пока мы не пройдем наш массив (через Список ).
Вот пример, в котором мы берем массив целых чисел и выводим каждый элемент построчно с помощью итератора:
По сравнению с циклами for, этот метод предпочитают разработчики, которые предпочитают не иметь дело с индексами массивов. Вам гарантирован предстоящий элемент с next() . Итераторы являются мощными , потому что мы используем один и тот же поток для любого типа Списка , такого как ArrayList или Связанный список , а также для других коллекций, таких как Карта или Набор !
Вывод
В этой статье мы рассмотрели основные методы, используемые для печати массива в Java. Мы начали с использования встроенных методов Java toString() и deepToString() .
Оттуда мы использовали потоки, чтобы мы могли быстро печатать элементы массива строка за строкой. Мы также рассмотрели, как преобразовать массив в список, который вы можете либо просто вызвать, либо использовать API Java 8 Stream для более детального управления.
Затем мы использовали традиционную структуру для цикла для печати каждого элемента по отдельности.
И последнее, но не менее важное: мы использовали объект итератора для печати каждого элемента отдельно, используя метод next() внутри цикла while . Подходы, описанные в этой главе, могут быть использованы в зависимости от варианта использования и проблемы, которую вы пытаетесь решить.
Как напечатать массив на Java
Печать массива — это быстрый способ дать нам представление о значениях содержимого внутри. Иногда значения массива являются желаемым результатом работы программы.
В этой статье мы рассмотрим, как распечатать массив в Java четырьмя различными способами.
Хотя «лучший способ» зависит от того, что нужно делать вашей программе, мы начнем с простейшего метода печати, а затем покажем более подробные способы сделать это.
- Распечатайте массив с помощью Arrays.toString () и Arrays.deepToString ()
- Печать массива с использованием потоков Java 8
- Распечатать массив путем преобразования в список
- Распечатать массив с помощью циклов For
- Преобразование в список и использование итератора
Распечатайте массив с помощью Arrays.toString () и Arrays.deepToString ()
Встроенный toString() — чрезвычайно простой способ распечатать отформатированные версии объектов в Java.
Каждый тип данных в Java считается классом, и по умолчанию каждый класс наследуется от java.lang.Object , корня иерархии классов Java. Вот почему в каждом классе есть метод toString() Однако массивы не переопределяют метод toString() для правильного форматирования вывода, а просто возвращает унаследованное значение, которое является хешем объекта.
Мы печатаем массивы с помощью toString() из класса в java.util.Arrays .
Возьмем этот пример, в котором мы печатаем значения массива целых чисел:
Приведенный выше код выведет следующее:
Обратите внимание, как все элементы разделены запятыми и заключены в квадратные скобки. Этот метод похож на визуальное представление массива.
Мы также можем использовать этот метод для печати массивов разных типов:
Это соответственно приводит к:
Метод toString() эффективен только для одномерных массивов. Когда у нас есть вложенные массивы, нам нужно использовать метод deepToString() :
Если вам нужно с первого взгляда deepToString() что находится в вашем массиве, лучше всего подойдут методы toString() и deepToString ().
Однако эти методы не позволяют форматировать вывод. Этот подход в основном является обходным решением того факта, что массивы по умолчанию toString()
Если вы предпочитаете некоторую гибкость форматирования, вы можете рассмотреть возможность использования Java 8 Streams .
Печать массива с использованием потоков Java 8
Один из вариантов печати массива — преобразовать его в поток объектов, а затем распечатать каждый элемент в потоке. У нас есть несколько вариантов использования потоков для печати нашего массива.
Например, мы можем напечатать наш массив построчно, вот так:
В этом случае мы используем статический метод stream() Arrays для создания последовательного потока наших данных. Для каждого элемента в нашем потоке мы вызываем на нем println() , заставляя его построчно отображаться следующим образом:
Примечание. Мы println() следующим образом: System.out::println . :: в Java — это оператор ссылки на метод. Функция forEach() может использовать лямбда-функцию или ссылку на метод.
В качестве альтернативы мы можем использовать класс Stream java.util.stream.Stream для аналогичного вызова функции println() в потоке данных нашего массива. Мы можем создать Stream из этих данных с помощью Stream.of() :
С помощью этого кода мы получим тот же результат:
Давайте попробуем это и с вложенными массивами, добавив даты выпуска начальных версий этих языков:
Вывод для каждой печати через потоки будет выглядеть примерно так:
Это не очень хорошо работает . Мы снова вызываем println() для объектов массива. Нам придется снова передать эти объекты в поток и распечатать их элементы.
Чтобы распечатать вложенные массивы, мы можем использовать лямбда-выражение в функции forEach() которое может перейти на второй уровень, создав другой поток каждого уровня и распечатав записи таким образом:
Эта лямбда-функция печатает элементы в каждом вложенном массиве. При компиляции и выполнении мы получим такой вывод:
Потоки упрощают работу с коллекциями. Но Java гибка и предоставляет еще больше возможностей. Традиционный цикл for по-прежнему многое делает для нас. Давайте посмотрим на печать массива с циклами.
Распечатать массив путем преобразования в список
Вы можете легко преобразовать массив Java в реализацию List Есть разные способы сделать это, и мы подробно рассмотрели каждый в нашей статье « Как преобразовать массив Java в ArrayList».
Короче говоря, вызов toString() или просто распечатка (которая неявно вызывает toString() ) в List распечатает содержимое:
Кроме того, вы можете использовать .forEach() изначально для любой Collection , которой является List . Итак, вы можете просто пойти дальше и сделать это:
Хотя это не очень хорошо отформатированный вариант:
Вы можете отказаться от ссылки на метод и просто использовать лямбда для большего контроля:
Распечатать массив с помощью циклов For
Более известный подход к печати массива в Java — использование цикла for С помощью for мы получаем индекс элемента, и мы можем использовать индекс для получения элемента массива.
Мы настраиваем for с переменной, обычно называемой i , в качестве счетчика, начиная с элемента 0 . Затем следует условие, которое сравнивает i с количеством элементов в массиве.
Примечание . Число элементов в массиве, которые будут использоваться в условии цикла, никогда не следует жестко задавать. Java предоставляет атрибут с именем length который позволяет программисту динамически вычислять количество элементов в массиве.
И последнее, но не менее важное: for принимает инкрементное значение, в нашем случае мы будем использовать i++ чтобы увеличивать счетчик на один элемент в каждой итерации.
Как только наш цикл настроен и готов, мы просто воспользуемся System.out.println() для отображения каждого элемента в массиве, используя обозначение прямоугольных скобок [i] принимая в качестве входных данных наш счетчик i .
Вот пример, в котором мы печатаем все элементы целочисленного массива построчно:
Выполнение этого кода выведет на консоль следующее:
Больше не нужно использовать циклы for Они довольно гибкие и концептуально простые. Например, если у вас были вложенные массивы, вы будете использовать вложенные циклы for
Наконец, давайте взглянем на итераторы и списки.
Преобразование в список и использование итератора
Объект итератора Java позволяет нам отображать каждый элемент нашего массива без необходимости использовать индексный подход, который мы рассмотрели в разделе цикла for
Чтобы использовать итераторы, мы должны изменить тип данных массива на List . Мы можем сделать это с помощью Array.asList() и сохранить возвращаемые значения списка в новой переменной. Метод asList() принимает массив и превращает его в реализацию List
Затем вам понадобится объект-итератор для настройки итератора массива. Итератор похож на указатель, указывающий на каждый элемент массива. Итератор помогает вам исследовать каждый элемент в индивидуальном порядке.
Чтобы создать объект-итератор, мы будем использовать метод iterator() нашего List . После того, как наш объект итератора был создан мы используем while цикл , как это предлагает более компактный способ печати каждого элемент возвращения итератора.
В while условие цикла будет содержать призыв к hasNext() метод нашего итератора. Внутри в while цикла, мы выводим каждый элемент с помощью вызова System.out.println() . Мы получаем элементы из итератора, вызывая метод next() . В while цикл будет держать итерации над каждым элементом , пока мы не проходится наш массив (по List ).
Вот пример, в котором мы берем массив целых чисел и печатаем каждый элемент построчно с помощью итератора:
По сравнению с циклами for этот метод предпочитают разработчики, которые предпочитают не иметь дело с индексами массивов. Вам гарантирован следующий элемент с помощью next() . Итераторы мощны, потому что мы используем этот же поток для любого типа List такого как ArrayList или LinkedList , а также для других коллекций, таких как Map или Set !
Заключение
В этой статье мы рассмотрели основные методы, используемые для печати массива в Java. Мы начали с использования встроенных методов Java toString() и deepToString() .
Оттуда мы использовали потоки, чтобы мы могли быстро печатать элементы массива построчно. Мы также рассмотрели, как преобразовать массив в список, который вы можете либо просто вызвать, либо использовать Java 8 Stream API для более детального контроля.
Затем мы использовали традиционную for для печати каждого элемента по отдельности.
И последнее , но не в последнюю очередь, мы использовали объект итератора для печати каждый элемент по отдельности с помощью next() метод внутри в while цикла. Подходы, описанные в этой главе, могут использоваться в зависимости от варианта использования и проблемы, которую вы пытаетесь решить.