Такой вопрос мы задавали на собесах. Он помогал нам отсеить и закончить собес на словах "ну лист - это такая штука, где элементы ссылаются друг на друга". Но если человек проходил эту часть успешно (да, такие бывали), то в основном большинстве мы приходили к следующим утверждениям:

- List<> это такой массив, но с более удобными методами;

- При расширении листа - увеличивается массив x2, а данные копируются;

Но был еще дополнительный вопрос:

Vector3[] arr = ; // 1 элемент или больше
List<Vector3> list = ; // 1 элемент или больше
arr[0].x = 123f;
list[0].x = 123f;

Где сломается такой код?

- Нигде

- arr[0].x

- list[0].x

- В обоих случаях

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

Read More  

Используйте UnsafeList вместо NativeList где это возможно. Поясню. UnsafeList - это прямой доступ к аллоцированной памяти, а NativeList содержит в себе указатель на UnsafeList, таким образом, чтобы дойти до данных списка нужно обратиться к указателю. 

Из минусов - отсутствие safety handler.

Важно: UnsafeList содержит данные о количестве элементов, т.е. относиться к этой структуре нужно как к любому ValueType (оно будет копироваться).

В принципе это касается всех коллекций.

Read More