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, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)
Big o (1) называется постоянным временем, но каково точное время в мс
blockquote>Большая O запись (и маленькая [ 113] o , также, кстати, не представляет какого-либо конкретного значения , оно представляет собой рост необходимых ресурсов в зависимости от размера входных данных. Он отвечает на вопрос: «если я выполню свой алгоритм для данных в два раза больше, это займет столько же времени или вдвое больше, либо будет экспоненциально хуже - больше или меньше?»
Одна наносекунда, миллиард лет и любое другое конкретное значение - все O (1).
Что касается вычислительных затрат на типичные операции с массивами, то все, что требует (возможно, в худшем случае) просмотра всего массива, будет по крайней мере O ( длина массива ). С функциональными методами, такими как
reduce
,map
и т. Д., Сложность функций обратного вызова также имеет значение - обратный вызов может быть O (1), но также может быть O (длина массива ) или O ( длина некоторого другого массива ).
blockquote>
- Что такое Big O для всех методов массива javascript (особенно indexof, включает в себя)
Поиск значений в неупорядоченных списках является классическим O (n ) задача: поскольку вы не знаете, где находится элемент, вам просто нужно начать проверять их один за другим. Хотя технически возможно создать «инверсную» карту значений -> для ключей для массивов, среды обычно просто этого не делают. Например, механизм V8 также не является исключением, см. https://github.com/v8/v8/blob/master/src/elements.cc , методы, подобные
IndexOfValueSlowPath
[1112 ]blockquote>for (uint32_t k = start_from; k < length; ++k) {
или
IndexOfValueImpl
blockquote>for (uint32_t k = start_from; k < length; ++k) {
и еще пару их экземпляров .
Они вызываются изRuntime_ArrayIndexOf
, в частности по строке 899 . Если этот метод не применяется, через пару строк есть запасной вариант, снова с использованием простого цикла for (ранее было установленоindex
, уже использовалось для вызова методов, упомянутых выше):< / blockquote>for (; index < len; ++index) {
blockquote>
- Что такое большой 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 , как простой проверка , если массив состоит из действительных ключей (чисел и строк)blockquote>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 ]
blockquote>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); }
blockquote>
- Big o (1) называется постоянным временем, но что является exa ct время в мс
Такого не существует.