Как вывести arraylist через tostring
Как распечатать массив на Java
В этом уроке мы напечатаем массивы на Java, используя методы toString() и Deept-string (), потоки для циклов и итераторов, с примерами и объяснениями!
Вступление
Печать массива – это быстрый способ дать нам представление о значениях содержимого внутри. Иногда значения массива являются желаемым результатом работы программы.
В этой статье мы рассмотрим как печатать массив на Java четырьмя различными способами.
Хотя “лучший способ” зависит от того, что должна делать ваша программа, мы начнем с самого простого метода печати, а затем покажем более подробные способы его выполнения.
Распечатайте массив с помощью Arrays.toString() и Arrays.deepToString()
Возьмем этот пример, где мы выводим значения массива целых чисел:
Приведенный выше код выведет следующее:
Обратите внимание, что все элементы разделены запятыми и заключены в квадратные скобки. Этот метод похож на визуальное представление массива.
Мы также можем использовать этот метод для печати массивов различных типов:
Это соответственно приводит к:
Метод toString() эффективен только для одномерных массивов. Когда у нас есть вложенные массивы, нам нужно использовать метод deepToString() :
Если вам нужно наглядное представление о том, что находится в вашем массиве с первого взгляда, методы toString() и deepToString () – ваш лучший вариант.
Печать массива с использованием потоков Java 8
Один из вариантов печати массива-преобразовать его в поток объектов, а затем распечатать каждый элемент в потоке. У нас есть несколько вариантов использования потоков для печати нашего массива.
Например, мы можем распечатать наш массив построчно следующим образом:
В качестве альтернативы мы можем использовать класс Stream из java.util.stream.Stream для аналогичного вызова функции println() в потоке данных нашего массива. Мы можем построить поток этих данных, используя Stream.of() :
С помощью этого кода мы получим тот же результат:
Давайте попробуем это также с вложенными массивами, добавив даты выпуска начальных версий этих языков:
Вывод для каждой печати через потоки будет выглядеть примерно так:
Git Essentials
Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!
Это не очень хорошо работает… Мы снова вызываем println() для объектов массива. Нам придется снова транслировать эти объекты и печатать их элементы.
Эта лямбда-функция выводит элементы в каждом вложенном массиве. При компиляции и выполнении мы получим этот результат:
Потоки облегчают работу с коллекциями. Но Java является гибкой, чтобы предоставить еще больше возможностей. Традиционный цикл for по-прежнему многое делает для нас. Давайте взглянем на печать массива с циклами.
Печать массива путем преобразования в список
Короче говоря, вызов toString () или просто распечатка (которая неявно вызывает toString() ) в Списке реализации, распечатает содержимое:
Хотя это не очень хорошо отформатированный вариант:
Вы можете отказаться от ссылки на метод и просто использовать лямбду для большего контроля:
Выведите массив с помощью циклов For
Вот пример, в котором мы выводим все элементы целочисленного массива строка за строкой:
При выполнении этого кода в вашей консоли будет выведено следующее:
Использовать для циклов не так уж много. Они довольно гибкие и концептуально просты. Например, если у вас были вложенные массивы, то вы будете использовать вложенные для циклов.
Наконец, давайте взглянем на итераторы и списки.
Преобразование в список и Использование Итератора
Объект итератора Java позволяет нам отображать каждый элемент вашего массива без использования индексного подхода, который мы рассмотрели в разделе для цикла.
Затем вам понадобится объект итератора для настройки итератора массива. Итератор подобен указателю, указывающему на каждый элемент массива. Итератор помогает вам проверять каждый элемент особым образом.
Вот пример, в котором мы берем массив целых чисел и выводим каждый элемент построчно с помощью итератора:
Вывод
Оттуда мы использовали потоки, чтобы мы могли быстро печатать элементы массива строка за строкой. Мы также рассмотрели, как преобразовать массив в список, который вы можете либо просто вызвать, либо использовать API Java 8 Stream для более детального управления.
Затем мы использовали традиционную структуру для цикла для печати каждого элемента по отдельности.
Вспомогательный класс Arrays
1. Класс Arrays
Как мы уже раньше говорили, массивы — очень полезная и часто используемая вещь в программировании.
Создатели Java очень скоро заметили, что Java-программисты часто пишут один и тот же код при работе с массивами. Например: «скопировать часть массива в другой массив», «заполнить все ячейки массива одинаковыми значениями», «вывести содержимое массива в удобно читаемом виде на экран» и т.п.
Поэтому они сделали специальный класс – Arrays (полное имя java.util.Arrays ), в который поместили самые популярные действия при работе с массивами.
В нем очень много методов на все случаи жизни, но для начала мы рассмотрим только 10 из них — самые простые и часто используемые.
2. Метод Arrays.toString()
Где имя — это имя переменной-массива, а str — это имя переменной, в которую сохранится строковое представление массива.
Java ArrayList: полное руководство
ArrayLists были популярной темой в Java. Они предоставляют гораздо больше преимуществ, чем стандартные массивы. ArrayLists позволяют эффективно хранить объекты в ряду и удалять их, когда они не нужны. Они также помогают выполнять стандартные операции со списками, такие как сортировка и поиск. Если бы вы использовали стандартный массив, вам пришлось бы написать свою собственную логику для этих операций, что потребует дополнительного времени и внимания.
Благодаря длинному списку преимуществ у ArrayLists есть приложения во множестве случаев. Однако важная операция, которая не встроена в ArrayLists, — это печать. Списки ArrayLists могут состоять из стандартных примитивных типов данных (например, целых чисел и строк) или из более сложных типов данных, таких как настраиваемые классы. В каждом из этих случаев для печати списка ArrayList требуются разные шаги.
В этой статье мы рассмотрим три основных способа печати ArrayList в Java, охватывающие два типа ArrayList, которые мы обсуждали выше. Без лишних слов, приступим!
Java ArrayList: три способа
Как упоминалось выше, существует два типа списков массивов: один содержит объекты с примитивным простым типом данных (например, целые числа и числа с плавающей запятой), а другой содержит объекты, экземпляры которых создаются с помощью настраиваемых классов. Есть несколько способов распечатать эти два типа списков массивов.
Это три основных способа распечатать список ArrayList в Java:
Метод 1. Использование цикла for
Цикл for — это один из простейших способов перебора списка или массива. Этот метод хорошо работает как с простыми массивами, так и со списками ArrayList, поскольку итерация по всем элементам по одному позволяет обрабатывать каждый из них соответствующим образом.
Этот метод помогает вам определить конкретные реализации для каждого элемента. Ниже приводится синтаксис цикла for:
// Do something with the current element here
>
Теперь давайте рассмотрим некоторые из распространённых способов использования цикла for для обхода массива объектов:
Примеры
Вы можете использовать цикл for, чтобы просто распечатать все элементы ArrayList:
Лучший способ преобразовать ArrayList в строку
у меня есть ArrayList что я хочу вывести полностью в виде строки. По сути, я хочу вывести его в порядке, используя toString каждого элемента, разделенных вкладками. Есть ли быстрый способ сделать это? Вы можете пройти через него (или удалить каждый элемент) и объединить его в строку, но я думаю, что это будет очень медленно.
28 ответов
в основном, используя цикл для итерации по ArrayList это единственный вариант:
не используйте этот код, продолжайте читать в нижней части этого ответа, чтобы понять, почему это нежелательно, и какой код следует использовать вместо этого:
на самом деле, конкатенация строк будет просто прекрасной, как javac компилятор оптимизирует конкатенацию строк как серию append операции StringBuilder в любом случае. Вот часть разборка байт-кода из for цикл из вышеуказанной программы:
(хорошо, на второй взгляд, StringBuilder создается экземпляр на каждой итерации цикла, поэтому он может быть не самым эффективным байт-кодом. Создание экземпляра и использование явного StringBuilder вероятно, даст лучшую производительность.)
в самом деле, я думаю, что наличие любого вида вывода (будь то на диск или на экран) будет по крайней мере на порядок медленнее, чем беспокоиться о производительности конкатенаций строк.
Edit: как указано в комментариях, приведенная выше оптимизация компилятора действительно создает новый экземпляр StringBuilder на каждой итерации. (Что я уже отмечал ранее.)
самый оптимизированный метод для использования будет ответом Павел Томблин, так как он создает только один экземпляр StringBuilder объект вне for петли.
переписывание в вышеуказанный код на:
будет только экземпляр StringBuilder один раз вне цикла, и только сделать два вызова append метод внутри цикла, о чем свидетельствует этот байт-код (который показывает создание экземпляра StringBuilder и цикл):
Итак, действительно, оптимизация рук должна быть лучше, так как внутри for цикл короче и нет необходимости создавать экземпляр a StringBuilder на каждой итерации.
Лучший способ преобразовать ArrayList в строку
у меня есть ArrayList что я хочу вывести полностью в виде строки. По сути, я хочу вывести его в порядке использования toString каждого элемента, разделенных вкладками. Есть ли быстрый способ сделать это? Вы можете перебрать его (или удалить каждый элемент) и объединить его в строку, но я думаю, что это будет очень медленно.
28 ответов:
в основном, используя цикл для итерации по ArrayList это единственный вариант:
не используйте этот код, продолжайте читать до конца этого ответа, чтобы понять, почему это нежелательно, и какой код следует использовать вместо этого:
на самом деле, конкатенация строк будет просто отлично, как javac компилятор оптимизирует конкатенацию строк как ряд append операции StringBuilder в любом случае. Здесь часть разборка байт-кода из for цикл из вышеуказанной программы:
(ладно, на второй взгляд, то StringBuilder создается экземпляр на каждой итерации цикла, поэтому он может быть не самым эффективным байт-кодом. Создание экземпляра и использование явного StringBuilder вероятно, даст лучшую производительность.)
в самом деле, я думаю, что наличие любого вида вывода (будь то на диск или на экран) будет по крайней мере на порядок медленнее, чем беспокоиться о производительности конкатенаций строк.
Edit: как указано в комментариях, приведенная выше оптимизация компилятора действительно создает новый экземпляр StringBuilder на каждой итерации. (Что я уже отмечал ранее.)
самый оптимизированный метод для использования будет ответом Павел Томблин, так как он только создает экземпляр одного StringBuilder объект вне for петли.
переписывание на приведенный выше код:
только инстанцировать StringBuilder один раз вне цикла, и только сделать два вызова append метод внутри цикла, о чем свидетельствует этот байт-код (который показывает экземпляр StringBuilder и цикл):
таким образом, действительно оптимизация рук должна быть более эффективной, так как внутри for цикл короче и нет необходимости создавать экземпляр a StringBuilder на каждой итерации.