Нужно сделать лог определенного размера в который можно бесконечно добавлять записи в виде строк но при этом когда некуда будет записывать новые записи старые будут затираться, мне тяжело сформулировать мысль, покажу на примере кода:
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;
}
Комментариев нет:
Отправить комментарий