<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>@java_fillthegaps</title><author><name>@java_fillthegaps</name></author><id>https://teletype.in/atom/java_fillthegaps</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/java_fillthegaps?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@java_fillthegaps?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=java_fillthegaps"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/java_fillthegaps?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-10T14:57:16.976Z</updated><entry><id>java_fillthegaps:QN39vs6K0</id><link rel="alternate" type="text/html" href="https://teletype.in/@java_fillthegaps/QN39vs6K0?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=java_fillthegaps"></link><title>Вопросы собеседований: методы интерфейса List (Java 10)</title><published>2020-10-04T11:41:55.495Z</published><updated>2020-10-06T05:57:17.013Z</updated><summary type="html">&lt;img src=&quot;https://telegra.ph/file/958613bd054cae1638f61.png&quot;&gt;Какой код при вставке в указанную область напечатает в консоли:</summary><content type="html">
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://telegra.ph/file/958613bd054cae1638f61.png&quot; width=&quot;1701&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Какой код при вставке в указанную область напечатает в консоли:&lt;/p&gt;
  &lt;blockquote&gt;Latest version 15 on 6.10.2020&lt;/blockquote&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;p&gt; Варианты ответов:&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://telegra.ph/file/a6f3d5fcd63b73094e0c3.png&quot; width=&quot;752&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;В общем, нам нужен такой код, который допускает изменение текущих элементов и добавление новых.&lt;/p&gt;
  &lt;pre&gt;A. List.of(&amp;quot;Latest&amp;quot;, &amp;quot;version&amp;quot;, &amp;quot;14&amp;quot;);&lt;/pre&gt;
  &lt;p&gt;Создаёт неизменяемый список, в котором методы &lt;em&gt;add, set, remove&lt;/em&gt; бросают &lt;em&gt;UnsupportedOperationException&lt;/em&gt;.&lt;/p&gt;
  &lt;p&gt;Этот вариант не подойдёт.&lt;/p&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;pre&gt;B. String[] array = {...};
   List&amp;lt;String&amp;gt; list = new ArrayList(array);&lt;/pre&gt;
  &lt;p&gt;У &lt;em&gt;ArrayList &lt;/em&gt;и &lt;em&gt;LinkedList &lt;/em&gt;нет конструктора, принимающего массив.&lt;/p&gt;
  &lt;p&gt;Результат — ошибка компиляции.&lt;/p&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;pre&gt;C. String[] array = {...};
   List&amp;lt;String&amp;gt; list = Arrays.asList(array);
&lt;/pre&gt;
  &lt;p&gt;Здесь создаётся структура, известная как Array backed list: элементы хранятся как массив, но используются методы интерфейса &lt;em&gt;List&lt;/em&gt;.&lt;/p&gt;
  &lt;p&gt;У массива размер задаётся при создании и не может меняться. Операции &lt;em&gt;add, remove, clear &lt;/em&gt;выбросят &lt;em&gt;UnsupportedOperationException&lt;/em&gt;.&lt;/p&gt;
  &lt;p&gt;Менять можно только существующие элементы: методы &lt;em&gt;set, replaceAll, sort&lt;/em&gt;.&lt;/p&gt;
  &lt;p&gt;Этот вариант тоже мимо.&lt;/p&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;pre&gt;D. List&amp;lt;String&amp;gt; arrList = new ArrayList&amp;lt;&amp;gt;() {{...}};
   List&amp;lt;String&amp;gt; list = List.copyOf(arrList);&lt;/pre&gt;
  &lt;p&gt;Метод из java 10 &lt;em&gt;copyOf &lt;/em&gt;даёт неизменяемую копию переданного списка. Если входная коллекция и так неизменяемая, возвращается она же. &lt;br /&gt;&lt;/p&gt;
  &lt;p&gt;Методы &lt;em&gt;add, set&lt;/em&gt; и остальные бросают &lt;em&gt;UnsupportedOperationException&lt;/em&gt;.&lt;br /&gt;&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Итого:&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Везде используется интерфейс &lt;em&gt;List&lt;/em&gt;, но по факту данные хранятся в массиве. Некоторые варианты позволяют обновлять существующие элементы, но добавлять и удалять элементы нельзя. Поэтому правильный ответ — F: ни один вариант не подойдёт. &lt;/p&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;p&gt;&lt;em&gt;Лирическое отступление: тренды и дизайн методов&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;Когда я первый раз увидела конструкцию&lt;/p&gt;
  &lt;pre&gt;List.of(&amp;quot;1&amp;quot;, &amp;quot;2&amp;quot;);&lt;/pre&gt;
  &lt;p&gt;то подумала, что это краткая форма записи обычного изменяемого списка:&lt;/p&gt;
  &lt;pre&gt;List&amp;lt;String&amp;gt; list = new ArrayList&amp;lt;&amp;gt;();
list.add(&amp;quot;1&amp;quot;);
list.add(&amp;quot;2&amp;quot;);&lt;/pre&gt;
  &lt;p&gt;Это логично, потому что java - ООП язык. Объекты представляют реальный мир и меняют свойства в зависимости от действий и условий.&lt;/p&gt;
  &lt;p&gt;Но сейчас идёт тренд на функциональный стиль: на первом плане не взаимодействие объектов, а обработка данных. Их нужно беречь и держать неизменными, это прослеживается во многих новых фичах: Stream API, Records и другие.&lt;/p&gt;
  &lt;p&gt;И в новых методах интерфейса &lt;em&gt;List &lt;/em&gt;неизменяемость тоже в приоритете♥️&lt;/p&gt;

</content></entry></feed>