Поскольку вы вызываете один и тот же метод System.arraycopy (), время достижения независимо, разве сложность не будет одинаковой для каждого?
Да и нет.
Да - когда вы действительно делаете копию, стоимость копии будет одинаковой во всех случаях.
(Они не совсем одинаковы, если учесть стоимость выделения и инициализации массива. Требуется больше места и времени для выделения и инициализации массива 2 * N
элементов, чем для N + 1
элементов. Новы будете копировать только N элементов в массив.)
Нет - различные стратегии приводят к тому, что копии массива происходят разное количество раз.Если вы выполните полный анализ сложности для последовательности операций, вы обнаружите, что варианты 3 и 4 отличаются по сложности от 1 и 2.
(И стоит отметить, что 2 будет быстрее, чем 1,даже если они имеют одинаковую сложность.)
Типичный анализ этого включает в себя вычисление общих затрат на что-то вроде этого:
List<Object> list = new ArrayList<>();
for (int i = 0; i < N; i++) {
list.add(new Object());
}
(Подсказка: анализ может быть приведен в качестве примера в рекомендованном вами учебнике по «структурам данных и алгоритмам» или в примечаниях к лекциям. Если это так, то это то, что вам следует пересмотреть (перед проведением практических экзаменов!) Если нет, то Googleдля «сложности амортизируемых arraylist», и вы найдете примеры.)