Мне нужно кратковременно хранить ассоциативные данные неизвестного количества в Java

Я хочу читать разные теги IoT на Java и отправлять их на сервер MQTT. Я мог просто прочитать данные и отправить их по сети, но данные могли приходить как раз в несколько минут, так и потоком вхождений несколько раз в секунду. Поэтому я подумал о буферизации данных в виде пар ключ-> значение и проверке, появился ли уже номер тега и как давно.

Я не знаю, сколько тегов может появиться.

В динамических языках сценариев я бы просто использовал массив или объект json, например {tag_number: [last_seen, times_seen]}, и проверял каждый раз, когда появляется tagnumber, я увеличиваю times_seen на 1, и если last_seen старше 1 секунды, отправляю times_seen в server, чтобы уменьшить сетевой трафик, если я получаю спам от тегов, которые сообщают о событиях.

Массив, который должен быть краткосрочным, долговременное хранение выполняется сервером MQTT.

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

массивник? карта? у вас есть тонны динамически растущих структур в java

aran 06.03.2019 16:11

Я предлагаю взглянуть на структуру коллекции, а именно List и Map, которые действуют как массив с динамическим размером соответственно. объект ключ-значение

Lino 06.03.2019 16:11

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

user6329530 06.03.2019 16:12

Если нет никакого ключа, никакой логики (вы просто сохраняете их все, обрабатываете их все), тогда вам может подойти массив массивов. Отредактируйте, просто прочитайте о парах KV -> используйте карту, как говорит @RobCo

aran 06.03.2019 16:13

HashMap звучит как то, что вам нужно. Это похоже на объект json, словарь или ассоциативный массив на других языках (сопоставление ключ-значение).

RobCo 06.03.2019 16:14

@AsierAranbarri Это должен быть ассоциативный ключ, чтобы я мог выбрать tag_number и посмотреть, как часто появлялся tag_number.

user6329530 06.03.2019 16:15

@RobCo да, это похоже на то, что я искал

user6329530 06.03.2019 16:17
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
7
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Возможно, HashMap — это то, что вы ищете

Вот, если вы хотите увидеть пример: https://www.w3schools.com/java/java_hashmap.asp

Другие вопросы по теме