Добавил:
Rumpelstilzchen2018@yandex.ru Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

3-й семестр / Лекции / 4 - Презентация 2 - ООП

.pdf
Скачиваний:
65
Добавлен:
25.12.2020
Размер:
596.48 Кб
Скачать

Центр дистанционного обучения

Вложенные классы

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