Elettracompany.com

Компьютерный справочник
4 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Двумерный arraylist java

Как заполнить двухмерный массив ArrayList в java с помощью целых чисел?

5 xiaolin [2011-02-17 01:17:00]

Мне нужно создать массив 2d с неизвестным размером. Поэтому я решил пойти с 2d ArrayList, проблема в том, что я не уверен, как инициализировать такой массив или хранить информацию.

Скажем, у меня есть следующие данные

. и т.д. до огромного количества случайных соединений

и я хочу вставить

Может ли массив автоматически обновлять столбец/строки для меня

Любая помощь приветствуется благодаря

7 ответов

18 Решение aioobe [2011-02-17 01:21:00]

Я не уверен, как инициализировать такой массив или хранить информацию.

Подобно этому, например:

или, если хотите:

Чтобы вставить новую строку, выполните

и добавить другой элемент в конкретный row , который вы делаете

Вот более полный пример:

15 OscarRyz [2011-02-17 01:24:00]

0 rfeak [2011-02-17 01:33:00]

Если у вас нет всех данных заранее, чтобы иметь возможность использовать решение aioobe, вы можете использовать таблицу из библиотеки Google Guava.

Основной недостаток этого заключается в том, что он не невероятно быстр или эффективен с точки зрения памяти, если вы работаете с большим количеством данных, так как все хеш-поиск и примитивы завернуты Integer.

В вашем примере выглядит так, что вы хотите иметь карту из пар ints для booleans (со значением по умолчанию false). Если это разреженная карта (т.е. На самом деле большая часть позиций ложна), вы можете быть лучше с чем-то вроде HashSet или аналогичным (будучи классом, инкапсулирующим два int с подходящей реализацией hashCode и равными).

Затем, чтобы сказать «0 соединяется 1», вы должны написать

Это действительно зависит от того, какие операции вы хотите использовать впоследствии — такой HashSet имеет быстрый поиск и изменение и использует не слишком много места, но вы не можете быстро «соседи» node 1 «. Если вам нужен такой доступ, вам может просто понадобиться класс вроде

и дополнительно список/массив/набор таких узлов.

Вопрос «массив неизвестного размера» недостаточно специфичен для того, чтобы действительно компетентно отвечать.

Короткий ответ на следующий вопрос:

но и get и put могут завершиться с ошибкой, если размер ArrayList равен Оригинал ответа (на английском)

0 Damon [2011-02-17 01:34:00]

Хорошо, если вы знаете, что у вас есть 3 строки и 5 столбцов (как показано в примере данных), вы можете инициализировать его следующим образом:

Однако, если число строк изменяется, вы можете сделать что-то вроде этого:

Теперь вы можете инициализировать:

Это позволит изменять размер строк и столбцов. Возможно, это не самый элегантный подход, но он должен работать.

Поскольку вам нужно только сохранить логические элементы в этом 2D-массиве, я бы сказал, что наиболее подходящая структура данных (как для потребления памяти, так и для полезного интерфейса) будет java.util.BitSet , которая в основном представляет собой класс, который моделирует бит-массив:

Как это 2D-массив, я думаю, что способ пойти был бы следующим:

В списке вы не можете просто сказать: «здесь 5-й элемент», не вставляя первые 4 элемента. Но в BitSet вы можете просто set() любой бит, который вам нужен, и он автоматически расширится до требуемого размера.

Двумерный ArrayList

Просто очень маленький вопрос. Я, кажется, столкнулся здесь с слишком большой сложностью: я должен реализовать индексную структуру, такую как <42, someString>. Я пытался:

Однако это выглядит действительно странно. Разве нет лучшего, гораздо более простого решения, чтобы просто хранить некоторое целое число и строку? Мне нужно выполнить поиск строк и вернуть целое число. поэтому я подумал, что коллекции и ArrayLists-хорошие друзья в Java API.

9 Ответов

Решение: используйте карту

Может быть, вам нужна карта ?

Вы можете искать его с помощью

Исправление кода OP

BTW, код в вопросе ошибочен. Вот как бы вы это сделали, если бы хотели использовать список массивов объектов (чего делать не следует):

Теперь вы можете искать вот так:

Читать еще:  Java security invalidkeyexception

Однако это только для справки, не делайте этого таким образом. Платформа коллекций содержит решения почти для всех стандартных случаев. Используйте карту.

Создайте класс кортежей

Если я правильно понимаю, вы должны использовать карту.

Просто используйте HashMap

почему бы не воспользоваться картой?

Это звучит, как вы хотите карту

Я бы воспользовался картой . Карты используются для хранения пар значений ключей.

Map не может использоваться вместо ArrayList, когда требуется поддерживать порядок.

Похожие вопросы:

У меня есть проблема с несколькими ArrayList путевых точек. У меня есть один корабль. У корабля есть путевые точки. public static ArrayList _waypoints = new ArrayList<>(); Для.

Как я могу преобразовать этот тип Arraylist в двумерный Arraylist ? ArrayList> two = new ArrayList>(); В android ExpandableListView не.

У меня есть код, который создает двумерный массив, но я хочу изменить этот код так, чтобы вместо int использовался класс Integer; и вместо массивов используется вложенный ArrayList. Как мне этого.

У меня есть проблемы со значением, которое возвращает arraylist. Я создал двумерный Arraylist, который включает в себя строковые массивы, когда я пытаюсь получить фактическое значение строковых.

У меня есть ArrayList, который имеет объекты, которые являются широтой и долготой. Мне нужно перевести их в двумерный массив. public void DrawPolygon(ArrayList

Это должен быть решатель головоломки судоку, и требуется, чтобы я использовал двумерный ArrayList для головоломки. Я пытаюсь заполнить ArrayList, используя числа из txt-файла. Код в моем тестовом.

У меня есть двумерный ArrayList, который содержит двойные значения: ArrayList> data = new ArrayList>(); По аналогии с классическими.

Я пытаюсь сделать программу инвентаризации, и я думаю, что было бы неплохо использовать двумерный ArrayList, допустим, у меня есть код элемента String 001 , который будет храниться в первом индексе.

Я пытаюсь сохранить данные из текстового файла в двумерный arraylist. Вот мой список массивов 2d private ArrayList> students = new.

#2 — Коллекции данных ArrayList и LinkedList

Видеоурок

В языке Java можно создавать как простые массивы данных, так и динамические массивы данных, что также называются коллекциями. Работа с простыми типами массивов была рассмотрена в курсе по основам языка Java. Посмотреть соответсвующий урок можно здесь .

Коллекции в языке Java

Стандартные массивы предоставляют лишь небольшой функционал по работе с элементами. Если мы захотим добавить 10 элемент в массив что состоит из 9 элементов, то будет выдана ошибка. Такой подход совсем неудобен, ведь не позволяет динамично управлять данными в массиве.

На помощь приходят коллекции данных. В языке Java есть множество интерфейсов по работе с коллекциями. Все такие интерфейсы представлены ниже:

Как видно из фото, каждая коллекция представляет из себя именно интерфейс, а не класс. Основным интерфейсом является Collection.

Вы можете создать коллекцию (другими словами: массив данных) на основе Collection или же на основе других интерфейсов, что являются наследниками интерфейса Collection.

Пугаться коллекций не стоит, ведь коллекции это лишь интерфейсы, а они в свою очередь лишь набор функций, которыми мы, разработчики, можем пользоваться.

Основные коллекции

Помимо главного интерфейса Collection есть три других главных формата:

  • List — коллекция для создания массивов данных, где индексами являются числа (0, 1, 2 и так далее);
  • Set — тоже самое что List, вот только в Set нельзя установить повторяющиеся элементы;
  • Map — коллекция для создания массивов данных, где индексами являются ключи («one», «2», «three» и так далее).

У каждого интерфейса есть интерфейсы наследники, что дополняют функциями базовый интерфейс. К примеру, можно создать коллекцию на основе класса List, а можно расширить её функционал за счёт создания коллекции на основе LinkedList.

Создание коллекций на основе разных интерфейсов очень схоже, поэтому в видео уроке были рассмотрены лишь ArrayList и LinkedList.

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

Читать еще:  Java net malformedurlexception

Работа с коллекциями

Для работы с коллекциями необходимо подключить соответсвующие интерфейсы из java.util .

При создании коллекции необходимо указать тип данных, имя, а также выделение памяти:

Для работы с элементами существует множество методов. Наиболее часто используемые представлены ниже:

  • add() — добавление элемента в конец массива;
  • remove() — удаление элемента из массива по его индексу;
  • clear() — очистка всего массива;
  • size() — получение размера массива (количество элементов);
  • addFirst() — добавление элемента в начало массива;
  • addLast() — добавление элемента в конец;
  • clone() — выполняет клонирование массива;
  • get() — возвращает элемент по индексу;
  • getFirst() — возвращает первый элемент в массиве;
  • getLast() — возвращает последний элемент в массиве;
  • set(index, element) — меняет значение элемента по индексу.

Двумерные массивы в java — инициализация, вывод и сортировка

Двумерный массив — это массив одномерных массивов. Я никогда не использовал 4-мерные массивы, даже трехмерные не так распространены.

Теперь возникает вопрос, когда используются многомерные массивы? Ну, 2D-массивы очень распространены в платформенных играх, таких как Super Mario, для представления экрана или местности; 2D блоки можно также использовать для того, чтобы представить электронную таблицу, или шахматы. Еще одним популярным применением являются матрицы.

Для представления матриц 3×2 необходимо 2 двумерных массива, состоящих из массива длины 3. Другими словами, каждая строка в двумерном массиве является одномерным массивом.

Java действительно не поддерживает многомерные массивы, но позволяет создавать и использовать массивы любого количества измерений. В истинном 2D массиве все элементы занимают непрерывный блок памяти, но в Java это не так. Вместо этого многомерный массив является массивом массива.


Это в отличие от языков, таких как C или FORTRAN, который позволяет массиву Java иметь строки различной длины, т. е. может иметь 2 столбца в одной строке и 3 столбца.

Массив 2×2 может содержать всего 4 элемента, и к ним можно получить доступ с помощью индекса строк и столбцов, например, [0][0] даст вам элементы в первой строке и первом столбце, аналогично[1][1] даст вам элементы из 2-й строки и 2-го столбца. Индекс начинается с 0 и заканчивается на -1.

Второе измерение является необязательным в Java. Вы можете создать 2D массив без указания обоих измерений, например, int[4][] является допустимым.
При создании двумерных или трехмерных array, первое измерение должно быть обязательно int[][3] — так нельзя, но int[3][] — это можно.

Как объявить двумерный массив в Java?

Вместо одной скобки вы будете использовать две, например, int [] [] — двумерный целочисленный массив. Определяется это следующим образом:

Кстати, когда вы изначально объявляете, вы должны помнить, что нужно указать первое измерение, например, следующее объявление является неверным:

Выражение выдаст ошибку «переменная должна предоставить либо выражения измерения, либо инициализатор массива» во время компиляции. С другой стороны, при заполнении, второе измерение является необязательным и даже если вы не укажете, компилятор не будет ругаться, как показано ниже:

Потому что двумерный массив не что иное, как массив из одномерных массивов, из-за этого, вы также можете создать двумерный, где отдельные одномерные имеет разную длину, как показано в следующем примере.

В этом примере вы можете видеть объявление двумерного массива, но его первая строка имеет 3 элемента, а вторая строка имеет только один элемент.

Вы можете получить доступ к элементам, используя оба индекса или только один индекс. Например, salutation[0][1] представляет единственную строку в Java, в то время как salutation[0] представляет одномерный.

Пока мы только что объявили и создали массив, но не инициализировали. Здесь можно увидеть значения по умолчанию для различных типов.

Массив символов немного сложнее, потому что, если вы печатаете 0 как символ, он напечатает нулевой символ, и поэтому я использовал его целочисленное значение, приведя к int.


Читать еще:  Java net connect exception

Инициализация

Теперь есть два способа инициализировать двумерный массив в Java:

  1. используя литерал массива во время создания.
  2. используя вложенный цикл for.

В следующем примере мы узнаем, как выполнить цикл через двумерный массив, инициализировать каждый элемент и вывести (напечатать).

Вам понадобится столько циклов, какова размерность массива. Например, для явной инициализации трехмерного массива потребуются три вложенных цикла for. С другой стороны, для инициализации двумерного массива достаточно двух вложенных циклов for.


Как вывести

Если вы хотите получить доступ к каждому элементу, то вам нужно выполнить итерацию по двумерному массиву, используя два цикла for. Почему? Потому что вам нужно два индекса для доступа к отдельному элементу.

Вы можете использовать расширенный для каждого цикла или классический для цикла со счетчиком. Для того, чтобы напечатать(сделать вывод) содержимое 2D массива, вы можете использовать либо этот метод, либо Arrays.deepToString(), который возвращает строку всех элементов.

Сортировка двумерного массива Java

Пусть нам дан двумерный массив Порядка N X M и номер столбца K (1

39 27 11 42
24 64 20 65
54 78 56 89
10 93 91 90

Списочный массив ArrayList

В Java массивы имеют фиксированную длину и не могут быть увеличены или уменьшены. Класс ArrayList реализует интерфейс List и может менять свой размер во время исполнения программы, при этом не обязательно указывать размерность при создании объекта. Элементы ArrayList могут быть абсолютно любых типов в том числе и null.

Пример создания объекта ArrayList

Можно инициализировать массив на этапе определения. Созданный объект list содержит свойство size. Обращение к элементам массива осуществляется с помощью метода get(). Пример :

Добавление элемента в массив ArrayList, метод add

Работать с ArrayList просто: необходимо создать объект и вставлять созданные объекты методом add(). Обращение к элементам массива осуществляется с помощью метода get(). Пример:

Замена элемента массива ArrayList, метод set

Чтобы заменить элемент в массиве, нужно использовать метод set() с указанием индекса и новым значением.

Удаление элемента массива ArrayList, метод remove

Для удаления элемента из массива используется метод remove(). Можно удалять по индексу или по объекту:

ПРИМЕЧАНИЕ: элементы, следующие после удалённого элемента, перемещаются на одну позицию ближе к началу. То же самое относится и к операции вставки элемента в середину списка.

Для очистки всего массива используется метод clear():

Определение позиции элемента ArrayList, метод indexOf

В списочном массиве ArrayList существует метод indexOf(), который ищет нужный элемент и возвращает его индекс.

Отсчёт в массиве начинается с 0, если индекс равен 2, значит он является третьим в массиве.

Проверка наличие элемента в ArrayList, метод contains

Чтобы узнать, есть в массиве какой-либо элемент, можно воспользоваться методом contains(), который вернёт логическое значение true или false в зависимости от присутствия элемента в наборе :

Понятно, что в массиве никаких овощей быть не может, поэтому в консоле будет отображено false.

Создание массива из элементов ArrayList, метод toArray

Для конвертирования набора элементов в обычный массив необходимо использовать метод toArray().

Интерфейс List

java.util.List является интерфейсом и его следует использовать вместо ArrayList следующим образом :

Или укороченный вариант для Java 7:

В примере тип ArrayList заменен на List, но в объявлении оставлен new ArrayList(). Всё остальное остаётся без изменений. Это является рекомендуемым способом.

Интерфейс List реализует более общий интерфейс коллекции Collection.

Преобразование массива в список, Arrays

Для создания массива можно не только добавлять по одному объекту через метод add(), но и сразу массив с использованием Arrays.asList(. ).

Пример создания и инициализации массива из объектов Integer.

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

Ссылка на основную публикацию
Adblock
detector