JavaRush/Java блог/Random/Кофе-брейк #147. Как преобразовать массив в список. 18 ка...

Кофе-брейк #147. Как преобразовать массив в список. 18 каверзных вопросов для собеседования по Java

Статья из группы Random
участников

Как преобразовать массив в список

Источник: Rrtutors В этой публикации вы узнаете различные способы преобразования массива в список Java. Кофе-брейк #147. Три способа преобразования массива в список. 18 каверзных вопросов для собеседования по Java - 1Существует три способа преобразования массива (Array) в список (List):
  1. Создание пустого списка и добавление элементов
  2. Использование метода Arrays.asList()
  3. Использование new ArrayList<>(Arrays.asList(arr))

Способ 1. Создание пустого списка и последующее добавление элементов

Этот метод — самый простой из трех, поэтому большинство разработчиков предпочитают использовать именно его. Все, что вам нужно сделать, это выполнить три простых шага:
  1. Создайте пустой список.
  2. Выполните итерацию по массиву элементов.
  3. Добавьте эти элементы в свой список.
Давайте посмотрим, как эти три шага реализовываются на практике. В этом примере мы собираемся создать пустой список и добавить элементы.
import java.util.ArrayList;
import java.util.List;
public class Create_List_add_arrays {
            public static void main(String[] args) {
                        String[] OurArray = new String[] { "123", "456", "789" };
        List<String> ourList = new ArrayList<>();
        for (int i=0; i<OurArray.length; i++){
            ourList.add(OurArray[i]);
        }
        System.out.println (ourList);
            }
}
Вывод:
[123, 456, 789]

Способ 2. Использование метода Arrays.asList()

Здесь мы будем использовать Arrays.asList (arr) — встроенный метод, предоставляемый Arrays для преобразования массива в список. Давайте посмотрим на приведенный ниже пример того, как реализован этот встроенный метод:
package Using_Arrays;
import java.util.Arrays;
import java.util.List;
public class using_method {
            public static void main(String[] args) {
                        String[] OurArray = new String[] { "100", "200", "300" };
                    List<String> OurList = Arrays.asList(OurArray);
                    System.out.println(OurList);

            }
}
Вывод:
[100, 200, 300]
Учтите, что этот способ работает только при создании списка фиксированного размера, что означает, что вы не сможете добавить в него больше элементов.

Способ 3. Использование new ArrayList<>(Arrays.asList(arr))

В этом способе мы просто используем новый список arrayList<>(Arrays.asList(integers)); чтобы преобразовать наш массив в список. Основное преимущество этого метода перед предыдущим заключается в том, что созданный массив позволяет пользователю добавлять в список больше элементов. Давайте посмотрим на пример кода:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ArrayList_methods {
            public static void main(String[] args) {
                        String[] ourArray = new String[] { "100", "200", "300" };
        List<String> ourList = new ArrayList<>(Arrays.asList(ourArray));
        System.out.println("Наш массив: " + ourList);
        ourList.add("400");
        System.out.println("После добавления нового элемента: " + ourList );
            }
}
Вывод:
Наш массив: [100, 200, 300] После добавления нового элемента: [100, 200, 300, 400]

18 каверзных вопросов для собеседования по Java

Источник: Medium Вашему вниманию предлагается подборка каверзных вопросов, которые может задать интервьюер на собеседовании по Java. Кофе-брейк #147. Три способа преобразования массива в список. 18 каверзных вопросов для собеседования по Java - 2

Что лучше всего подходит для ключа HashMap? Могут ли строки быть хорошим вариантом для этого?

Неизменяемые объекты — хорошие кандидаты для использования в виде ключа HashMap, поскольку их нельзя изменить после создания. Ведь строки неизменяемы по своей природе.

Может ли переменная быть одновременно local и static?

Нет, переменная не может быть одновременно local и static, это приведет к ошибке компиляции. На локальном уровне разрешен только final.

Можно ли определить метод в классе Java и обеспечить его реализацию на другом языке программирования, таком как C++?

Да, это можно сделать, используя собственный стек методов. В этом случае мы определим общедоступные статические методы в нашем классе Java без его реализации, а затем предоставим реализацию на другом языке, таком как C++.

Можем ли мы использовать конструктор класса по умолчанию, даже если определен явный конструктор?

Если у нас есть параметризованный конструктор, мы не можем автоматически вызвать внутренний конструктор по умолчанию (default), это приведет к ошибке компиляции.

Если поток выполняет синхронизированные методы, возможно ли одновременное выполнение другого синхронизированного метода другим потоком?

Нет, невозможно выполнить синхронизированный метод другими потоками, когда поток находится внутри синхронизированного метода.

Если два потока имеют одинаковый приоритет, какой поток будет выполнен первым?

Это полностью зависит от планировщика потоков, какой поток выполнять. Планировщик может выбрать любой поток из пула и запустить его до его завершения, или он может предоставить равные возможности для всех потоков путем разделения времени.

Можно ли метод sleep() использовать с другим потоком?

Нет. Метод sleep() можно использовать только в текущем потоке.

В контексте потока, когда будет вызвано исключение IllegalMonitorStateException?

Когда wait(), notify(), notifyall() вызываются в несинхронизированном контексте, мы получим исключение IllegalMonitorStateException.

Можем ли мы сериализовать статические переменные в Java?

Мы не можем сериализовать статическую переменную в Java. Причина в том, что статическая переменная — это класс, который принадлежит классу, но не объекту. А сериализация сохраняет только состояние объекта, а не состояние класса.

Почему строка неизменяема по своей природе?

Основной причиной неизменяемости строки является безопасность, поскольку строки совместно используются в разных областях, таких как файловые системы, сети, базы данных и так далее. Неизменяемость позволяет обеспечить безопасность и надежность строки, чтобы никто не мог изменить ссылку на нее после ее создания. Еще одна причина заключается в том, чтобы избежать изменения общих ссылок.

Можем ли мы использовать оператор присваивания в блоке if?

Да, переменные могут быть назначены в блоке if, но не могут быть объявлены в блоке if.
int i;
if((i = someMethod()) != 0) return true;

В чем разница между синхронизированным блоком и синхронизированным методом?

Между ними нет видимой разницы, оба достигают одной и той же цели. Важно то, в каком контексте они используются. Ключевое слово synchronized, используемое на уровне метода, делает весь метод потокобезопасным. В то время как синхронизированный блок делает потокобезопасным только код, написанный внутри него.

Можем ли мы иметь статический метод и нестатический метод с одинаковым именем в одном классе?

Нет, у нас не может быть статического метода и нестатического метода с одинаковым именем в одном классе, компилятор выдаст ошибку времени компиляции. Показанный ниже сценарий не допускается.
class Main{
     public static void main(){
           //some code
     }
     public void main(){
          //some code
     }
}

Как мы можем сделать основной поток потоком Daemon?

В идеале, когда нам нужно создать поток Daemon, мы используем метод setDaemon() из класса потока. Но учтите, что мы не можем сделать основной поток потоком демона (Daemon).

Можно ли использовать реализацию hashcode() по умолчанию в интерфейсе?

Нет, вы не можете указать реализацию hashcode() по умолчанию в интерфейсе для использования всеми реализующими классами. Нам не разрешено переопределять метод классов java.lang.Object в качестве метода по умолчанию в интерфейсе, иначе мы получим ошибку времени компиляции.

Как метод по умолчанию в интерфейсах справляется с проблемой ромба (diamond problem)?

Проблема ромба (diamond problem) в Java — это когда два интерфейса содержат одни и те же методы по умолчанию, и реализующий класс не понимает, какой метод вызывать. В подобной ситуации код просто не будет компилироваться. Решение проблемы состоит в том, чтобы переопределить неоднозначный метод и вызвать Interface.super.methodName().

Доступны ли статические методы в интерфейсе для реализующих классов по умолчанию?

Статические методы недоступны для реализующих классов по умолчанию. Вы можете вызывать эти статические методы, используя имя интерфейса напрямую из реализующего класса, поскольку реализующий класс не будет иметь прямого доступа к этим методам.

Предположим, если у нас есть несколько классов в одном и том же исходном файле, что произойдет во время компиляции?

Если у нас есть файл .java с классом A, классом B и классом C в одном и том же файле, тогда во время компиляции будет создан отдельный файл .class для каждого класса.
Комментарии
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
У этой страницы еще нет ни одного комментария