Я хочу спросить вас, что лучше, как добавить элемент в массив, если мне нужно проверить, существует ли индекс (длина массива в порядке)?

1)

private void addItemToArray(int[] arr, int index, int item)
{
     if(index >= 0 && index < arr.length) {
          //put item
     }
}

2 )

private void addItemToArray(int[] arr, int index, int item)
{
   try {
       //put item
   catch(Exception e) {
       return;
   }
}
0
PanTau 1 Мар 2015 в 12:20

2 ответа

Лучший ответ

Лучше использовать if (первый метод), так как обнаружение ошибок требует больших затрат с точки зрения производительности.

Просто примечание, предложение if неверно, вы хотите проверить

if(index > 0 && index < arr.length){
          //put item
     }
0
ashatte 2 Мар 2015 в 02:49

Исключение определенно является лучшей альтернативой, чем бездействие, поскольку вызывающий метод должен иметь возможность узнать, что предоставленный ими индекс недействителен. Хотя перехватывать исключение и ничего не делать в блоке catch, как вы это делали во втором фрагменте, бессмысленно.

Вы можете взять пример из ArrayList, который содержит внутренний массив:

/**
 * Inserts the specified element at the specified position in this
 * list. Shifts the element currently at that position (if any) and
 * any subsequent elements to the right (adds one to their indices).
 *
 * @param index index at which the specified element is to be inserted
 * @param element element to be inserted
 * @throws IndexOutOfBoundsException {@inheritDoc}
 */
public void add(int index, E element) {
  if (index > size || index < 0)
    throw new IndexOutOfBoundsException(
    "Index: "+index+", Size: "+size);

  ensureCapacity(size+1);  // Increments modCount!!
  System.arraycopy(elementData, index, elementData, index + 1,
         size - index);
  elementData[index] = element;
  size++;
}

Если вы должны избегать создания исключений, самое меньшее, что вы можете сделать, - это заставить метод возвращать boolean, который указывает, был ли изменен массив.

1
Eran 1 Мар 2015 в 09:23