Как List copy установить в Java? - PullRequest
0 голосов
/ 24 мая 2018

enter image description here

Я тестировал ниже код.Я ожидал ошибку компиляции, потому что я приказал компилятору скопировать «Set <>».Подробно, «Hashmap.keySet ()» возвращает «Set <>», а не «List <>».Раньше я знал, что «Set <>» несовместим с «List <>» на основе выше структуры.Не могли бы вы дать мне знать, как работает этот код?

        List<String> h = new ArrayList<String>(HashMap<>.keySet());

Ответы [ 3 ]

0 голосов
/ 24 мая 2018

Конструктор ArrayList, используемый в этом коде, принимает Collection, что равно Set.

0 голосов
/ 24 мая 2018

Конструктор ArrayList , используемый в этом коде, принимает коллекцию, которой является набор.

Внутри конструктора ArrayList они преобразуют коллекцию в массив.В ArrayList они использовали Object [] для хранения объектов.

Создает список, содержащий элементы указанной коллекции, в порядке, в котором они возвращаются итератором коллекции.

public ArrayList(Collection<? extends E> c) {
     elementData = c.toArray();
     size = elementData.length;
     // c.toArray might (incorrectly) not return Object[] (see 6260652)
     if (elementData.getClass() != Object[].class)
        elementData = Arrays.copyOf(elementData, size, Object[].class);
}
0 голосов
/ 24 мая 2018

HashMap<>.keySet() возвращает Set.A Set является Collection.ArrayList имеет конструктор, который принимает Collection и добавляет все элементы Collection в List.Поэтому вы можете передать HashMap<>.keySet() этому конструктору.

java.util.ArrayList.ArrayList (Collection c)

Создает список, содержащий элементыуказанная коллекция, в том порядке, в котором она возвращается итератором коллекции.

...