Назад к задачамПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Junior — Senior
6
Анализ кода: реализация MyStringBuilder
Условие задачи
Класс MyStringBuilder предоставляет базовый набор операций: добавление строки в конец, добавление строки в начало, получение символа по индексу, преобразование в обычный String и подсчёт количества разных символов. Необходимо обнаружить проблемные места, анти‑паттерны и неэффективные участки реализации, а также предложить пути их улучшения.
public class MyStringBuilder {
private final List<Character> chars;
public MyStringBuilder() {
chars = new ArrayList<>();
}
public void addToEnd(String s) {
List<Character> list = new ArrayList<>();
for (char c : s.toCharArray()) {
list.add(c);
}
chars.addAll(list);
}
public void addToStart(String s) {
List<Character> list = new ArrayList<>();
for (char c : s.toCharArray()) {
list.add(c);
}
chars.addAll(0, list);
}
public Character get(int index) {
return chars.get(index);
}
@Override
public String toString() {
var result = "";
for (var nextChar : chars) {
result += nextChar;
}
return result;
}
public int distinctCharsCount() {
var differentCharacters = new ArrayList<Character>();
for (var c : chars) {
if (differentCharacters.indexOf(c) == -1)
differentCharacters.add(c);
}
return differentCharacters.size();
}
}
public class Main {
public static void main(String[] args) {
var builder = new MyStringBuilder();
builder.addToEnd("aa");
System.out.println(builder.distinctCharsCount()); // 1
builder.addToStart("bb");
builder.addToStart("ab");
System.out.println(builder.distinctCharsCount()); // 2
System.out.println(builder); // abbbaa
}
}