Я использую ArrayList<String>
и добавляю данные по определенным индексам, как я могу проверить, существует ли определенный индекс?
Должен ли я просто get()
проверить значение? Или мне ждать исключения? Есть другой способ?
Обновить
Спасибо за ответы, но поскольку я добавляю материалы только по определенным индексам, длина списка не покажет мне, какие из них доступны.
get()
проверитьnull
- не полагайтесь на исключения. Рассмотрите возможность использованияHashTable
вместо этого java.sun.com/j2se/1.4.2/docs/api/java/util/Hashtable.htmlОтветы:
Метод
arrayList.size()
возвращает количество элементов в списке, поэтому, если индекс больше или равенsize()
, он не существует.источник
size()
», поскольку это индекс, отсчитываемый от нуля.index = 0
и моимlist.size() == 0
тоже. так что в первый раз я проверю, что это правда, и я подготовлю список, чтобы что-то сделать. но в следующий раз в этом индексе мой индекс все еще будет таким,index = 0
и теперь я повторно инициализирую этот элемент в списке, когда я должен был что-то делать. Первая мысль относится ко&&
второму условию,list.get(index) == null
но это не работает, поэтому есть такие вопросы, как этотХотя у вас есть дюжина предложений об использовании размера вашего списка, которые подходят для списков с линейными записями, похоже, никто не прочитал ваш вопрос.
Если вы добавляете записи вручную в разные индексы, ни одно из этих предложений не сработает, так как вам нужно проверить конкретный индекс.
Использование if (list.get (index) == null) также не будет работать, поскольку get () выдает исключение вместо возврата null.
Попробуй это:
Сюда добавляется новая запись, если индекс не существует. Вы можете изменить его, чтобы сделать что-то другое.
источник
try/catch
для такого рода работы, это замедлит вашу программу на 50% или, может быть, больше .. проверка ошибок добавляет как ремешок к существующему коду, чтобы замедлить его ... лучше избегать этого в критических областях. Проверкаlength
в этом случае - лучшее, что вы можете сделать, так какindex
всегда будет меньшеlength
, чем старыеindex
, будут сдвинуты и станут новымиindex
, если выremove
их, поэтому проверка правилаlength
всегда будет работать.Это то, что вам нужно ...
Почему бы не использовать простой старый массив? Я думаю, что индексированный доступ к списку - это запах кода.
источник
Обычно я просто проверяю, меньше ли индекс размера массива
Если вас также беспокоит отрицательное значение индекса, используйте следующие
источник
По поводу вашего обновления (что, наверное, должно быть другим вопросом). Вы должны использовать массив этих объектов вместо ArrayList, чтобы вы могли просто проверить значение на null:
Лучшая практика
Если в вашем массиве нет сотен записей, вам следует подумать об организации его как класса, чтобы избавиться от магических чисел 3,8 и т. Д.
Поток управления с использованием исключения - плохая практика.
источник
Поскольку
java-9
существует стандартный способ проверки принадлежности индекса к массиву - Objects # checkIndex () :источник
of()
Метод также добавляется в Java 9 класса List : docs.oracle.com/javase/9/docs/api/java/util/List.html#of--Вы можете проверить размер файла с
ArrayList
помощьюsize()
метода. Это вернет максимальный индекс +1источник
простой способ сделать это:
источник
Быстрый и грязный тест, существует ли индекс или нет. в вашем списке замены реализации. Список, который вы тестируете.
или для 2D-списков массивов ...
источник
.length
имеет ,list.size()
но это не большая проблема , я ввернуть , как это все время , ха - ха , я полагаться на компилятор , чтобы направлять меня на том. Вы, наверное, думали о примитивных массивахЕсли ваш индекс меньше размера вашего списка, значит, он существует, возможно, со
null
значением. Если индекс больше, вы можете позвонитьensureCapacity()
, чтобы использовать этот индекс.Если вы хотите проверить, является ли значение в вашем индексе
null
или нет, позвонитеget()
источник
Вы можете проверить размер массива.
источник