Страницы

Поиск по вопросам

понедельник, 3 июня 2019 г.

Как реализовать ограниченный лог?

Нужно сделать лог определенного размера в который можно бесконечно добавлять записи в виде строк но при этом когда некуда будет записывать новые записи старые будут затираться, мне тяжело сформулировать мысль, покажу на примере кода:
MyLog log = new Mylog(1024); // создание лога размером в 1024 записи log.add("запись в логе #1"); // добавляем запись log.add("запись в логе #2"); // ещё добавляем запись ... log.add("запись в логе #1025); // запись #1 затирается все строки сдвигаются и запись #1025 становится в конец String[] arr = log.toArray(); // Возвращает массив из 1024 строк
Как такое оптимальнее всего сделать?
Возможно есть какое-то название для этого "лога", разновидность стека какая нибудь там?
Сложность вставки в худшей случае будет O(n) или еще больше?
И да, возможно есть это в стандартной библиотеке?


Ответ

Думаю можно сделать таким образом:
MyLog log = new Mylog(1024); - создается массив из 1024 элемента Курсор при создании = 0
this.cursor = 0; this.perepolneniye = FASLE; функция Add() добавляет запись и передвигает курсор
public void add(String logData){ this.cursor ++; if (this.cursor > MAX_SIZE) { this.cursor = 0; this.perepolneniye = TRUE; } logArray[this.cursor] = logData; } Теперь когда нужно все это собрать и распечатать, нужно с начало собрать из cursor + 1 до конца и потом из начало до cursor'а. Но если не было переполнения, тогда только с начало до cursor'а.
public void outResult(){ String result = ""; if (this.perepolneniye) { // Собираем от this.cursor+1 до MAX_SIZE } // Собираем от 0 до this.cursor return result; }

Комментариев нет:

Отправить комментарий