Большой O всех массивов и методов javascript [в ожидании]

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

-2
задан Aditya toke 14 April 2019 в 11:47
поделиться

2 ответа

Big o (1) называется постоянным временем, но каково точное время в мс

Большая O запись (и маленькая [ 113] o , также, кстати, не представляет какого-либо конкретного значения , оно представляет собой рост необходимых ресурсов в зависимости от размера входных данных. Он отвечает на вопрос: «если я выполню свой алгоритм для данных в два раза больше, это займет столько же времени или вдвое больше, либо будет экспоненциально хуже - больше или меньше?»

Одна наносекунда, миллиард лет и любое другое конкретное значение - все O (1).

Что касается вычислительных затрат на типичные операции с массивами, то все, что требует (возможно, в худшем случае) просмотра всего массива, будет по крайней мере O ( длина массива ). С функциональными методами, такими как reduce, map и т. Д., Сложность функций обратного вызова также имеет значение - обратный вызов может быть O (1), но также может быть O (длина массива ) или O ( длина некоторого другого массива ).

0
ответ дан mbojko 14 April 2019 в 11:47
поделиться
  1. Что такое Big O для всех методов массива javascript (особенно indexof, включает в себя)

Поиск значений в неупорядоченных списках является классическим O (n ) задача: поскольку вы не знаете, где находится элемент, вам просто нужно начать проверять их один за другим. Хотя технически возможно создать «инверсную» карту значений -> для ключей для массивов, среды обычно просто этого не делают. Например, механизм V8 также не является исключением, см. https://github.com/v8/v8/blob/master/src/elements.cc , методы, подобные IndexOfValueSlowPath [1112 ]

for (uint32_t k = start_from; k < length; ++k) {

или IndexOfValueImpl

for (uint32_t k = start_from; k < length; ++k) {

и еще пару их экземпляров .
Они вызываются из Runtime_ArrayIndexOf , в частности по строке 899 . Если этот метод не применяется, через пару строк есть запасной вариант, снова с использованием простого цикла for (ранее было установлено index, уже использовалось для вызова методов, упомянутых выше):

for (; index < len; ++index) {
< / blockquote>
  1. Что такое большой O всего метода объекта javascript (особенно ключей, значений)

Object находится в соседнем (в массив) исполняемый файл, https://github.com/v8/v8/blob/master/src/runtime/runtime-object.cc , но и там не ожидайте магии, он также заканчивается в различных циклах for в https://github.com/v8/v8/blob/master/src/keys.cc , как простой проверка , если массив состоит из действительных ключей (чисел и строк)

static bool ContainsOnlyValidKeys(Handle<FixedArray> array) {
  int len = array->length();
  for (int i = 0; i < len; i++) {
    Object e = array->get(i);
    if (!(e->IsName() || e->IsNumber())) return false;
  }
  return true;
}

или другого, вызванного из разных мест для создания единой коллекции из нескольких источников: [1131 ]

void KeyAccumulator::AddKeys(Handle<FixedArray> array,
                             AddKeyConversion convert) {
  int add_length = array->length();
  for (int i = 0; i < add_length; i++) {
    Handle<Object> current(array->get(i), isolate_);
    AddKey(current, convert);
  }

  1. Big o (1) называется постоянным временем, но что является exa ct время в мс

Такого не существует.

0
ответ дан tevemadar 14 April 2019 в 11:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: