lunes, 2 de febrero de 2015

Númeración en colecciones Java e IndexOutBoundsException

A la hora de crear o utilizar una colección en Java, ya sea un vector, una matriz, un ArrayList, etc debemos tener especial cuidado en cómo utilizamos sus elementos.

En una colección en Java debemos tener presente que están numeradas a partir del número cero, es decir, el primer elemento de una colección es el que están la posición 0.

Por tanto para referirnos a un elemento de un vector de 3 elementos debemos tener presente que el primer elemento será el situado en la posición 0 del vector, el 2 será el de la posición 1 y el 3 será el de la posición 2 y así sucesivamente si el vector tuviera más elementos.

Esta posición es conocida comúnmente como su índice, por lo que podemos decir que la posición que ocupa un objeto en una colección es conocida como su índice y el primer elemento de esa colección tiene por índice el número 0.

A la hora de utilizar los elementos de una colección debemos tener especial cuidado al referenciarlos pues podríamos incurrir en errores muy comunes como llamar a un objeto que no existe. Dado que el índice de elementos de cualquier colección empieza por 0 debemos tener en cuenta que el último índice de esa colección es el tamaño de la colección-1, por ejemplo en un vector de 3 elementos, el último índice será el 2 (3-1) y así con cualquier colección.

¿Qué pasa cuando intentamos acceder a un elemento que está fuera de los índices de la colección? Pues se produce un error llamado IndexOutBoundsException que es un error de desbordamiento por intentar acceder a un elemento que no existe, por ejemplo si tenemos un vector de 3 elementos e intentamos acceder al tercer elemento del vector deberíamos poner el índice número 2 ya que empieza en 0 y sus elementos serían (0,1,2), si usamos el número 3 para usarlo no mostraría ese error y el programa dejaría de funcionar, por ello debemos tener especial cuidado a la hora de usar los índices de nuestras colecciones y no incurrir así en estos errores.

Este tipo de errores es muy común cuando usamos ciclos como for para recorrer una colección y no tenemos en cuenta el tamaño de la colección e intenemos recorrer índices que se salen de los límites de la colección.

Por ejemplo si tenemos un vector de nombre Vector de 3 elementos y lo intentamos recorrer con un ciclo for de la siguiente forma:

for(int i=0; i<=3;i++)
{
    Operar(Vector[i]);
}

Al llamarlo de esta forma tendríamos un IndexOutBoundsException pues cómo vemos el for se repetirá mientras la i sea menor o igual que 3, por lo que al llegar a 3 intentará realizar Operar(Vector[3]) y cómo no existe ese elemento dará error, ese error se solucionaría cambiando el <= por < por lo que la i solo podría llegar a 2.

Tener mucho cuidado a la hora de usar índices pues un uso inadecuado o incorrecto os podría llevar a tener grandes quebraderos de cabeza a la hora de realizar vuestras aplicaciones.

No hay comentarios:

Publicar un comentario