
3-й семестр / Лекции / 4 - Презентация 2 - ООП
.pdf
Центр дистанционного обучения
Вложенные классы
public interface IntOperation { int perform(int x, int y);
}
IntOperation add = (int x, int y) -> x + y; IntOperation subtract = (a, b) -> a – b;
online.mirea.ru

Центр дистанционного обучения
String и StringBuilder
String str = “ABC”;
str += “DEFG”; // Эквивалентно str = str + “DEFG”
https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/String.html
StringBuilder buf = new StringBuilder(“ABC”); buf.append(“DEFG”);
https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/StringBuilder.html
online.mirea.ru

Центр дистанционного обучения
String и StringBuilder
package java.lang;
public interface CharSequence { ... } public interface Appendable { ... } abstract class AbstractStringBuilder
implements CharSequence, Appendable { ... } public final class StringBuilder
extends AbstractStringBuilder
implements CharSequence { ... }
public final class String implements CharSequence { ... }
online.mirea.ru

Центр дистанционного обучения
String и StringBuilder
String str = “ABC”;
“ABC”
str
str = str + “DEFG”;
“ABC” + “DEFG”
str
“ABCDEFG”
При склеивании копируются 3+4=7 символов
Сложность операции x + y = O(x.length() + y.length())
online.mirea.ru

Центр дистанционного обучения
String и StringBuilder
StringBuilder buf = new StringBuilder(“ABC”);
“ABC”
str
buf.append(“DEFG”);
“ABCDEFG”
str
При склеивании копируются 4 символа
Сложность операции x.append(y) = O(y.length())
online.mirea.ru

Центр дистанционного обучения
String и StringBuilder
String str = “”;
for (int i = 0; i < 1_000_000; i++) { str += “X”;
}
i=0: копируется 0+1=1 символов, str.length()=1 i=1: копируется 1+1=2 символов, str.length()=2 i=2: копируется 2+1=3 символов, str.length()=3
...
i=n: копируется n+1 символов, str.length()=n+1
online.mirea.ru

Центр дистанционного обучения
String и StringBuilder
String str = “”;
for (int i = 0; i < 1_000_000; i++) { str += “X”;
}
Итого копируется 1+2+...+(n+1)+...+1_000_000 =
1_000_000*(1+1_000_000)/2 ≈ 0.5E+12 операций
Сложность – O(n^2); время выполнения ≈ 3.5 минут
online.mirea.ru

Центр дистанционного обучения
String и StringBuilder
StringBuilder buf = new StringBuilder(); for (int i = 0; i < 1_000_000; i++) {
buf.append(“X”);
}
i=0: копируется 1 символ, buf.length()=1 i=1: копируется 1 символ, buf.length()=2 i=2: копируется 1 символ, buf.length()=3
...
i=n: копируется 1 символ, buf.length()=n+1
online.mirea.ru

Центр дистанционного обучения
String и StringBuilder
StringBuilder buf = new StringBuilder(); for (int i = 0; i < 1_000_000; i++) {
buf.append(“X”);
}
Итого копируется 1+1+...+1+...+1 = 1_000_000 операций
Сложность – O(n); время выполнения ≈ 15 миллисек
online.mirea.ru

Центр дистанционного обучения
String и StringBuilder
При склеивании большого количества строк в цикле нужно использовать StringBuilder.
При склеивании заранее известного количества строк без цикла:
String str = s1 + s2 + s3 + s4 + s5;
компилятор сам оптимизирует склеивание.
online.mirea.ru