Removendo o primeiro elemento de uma matriz

Removendo o primeiro elemento de uma matriz

1. Visão geral

Neste tutorial,we’ll look at how to remove the first element of an array.

Além disso, também veremos como o uso de estruturas de dados deJava Collections Framework torna as coisas ainda mais fáceis.

2. UsandoArrays.copyOfRange()

Em primeiro lugar,removing an element of an array isn’t technically possible in Java. Para citar oofficial docs:

“Uma matriz é um objeto de contêiner que contém um número fixo de valores de um único tipo. O comprimento de uma matriz é estabelecido quando a matriz é criada. Após a criação, seu comprimento é fixo. ”

Isso significaas long as we’re working with an array directly, all we can do is create a new array of smaller size, which then doesn’t contain the first element.

Felizmente, o JDK fornece uma função auxiliar estática conveniente que podemos usar, chamadaArrays.copyOfRange():

String[] stringArray = {"foo", "bar", "baz"};
String[] modifiedArray = Arrays.copyOfRange(stringArray, 1, stringArray.length);

Observe que esta operação tem um custo deO(n), uma vez que criará um novo array a cada vez.

Obviamente, essa é uma maneira complicada de remover um elemento da matriz e, se você estiver executando essas operações regularmente, pode ser mais sensato usar o Java Collections Framework.

3. Usando uma implementaçãoList

Para manter aproximadamente a mesma semântica da estrutura de dados (uma sequência ordenada de elementos que são acessíveis por índice), faz sentido usar uma implementação deList interface.

As duas implementações mais comuns sãoArrayListeLinkedList.

Suponha que temos o seguinteLists:

List arrayList = new ArrayList<>();
// populate the ArrayList

List linkedList = new LinkedList<>();
// populate the LinkedList

Como as duas classes implementam a mesma interface, o código de exemplo para remover o primeiro elemento tem a mesma aparência:

arrayList.remove(0);
linkedList.remove(0);

No caso deArrayList, o custo de remoção éO(n), enquantoLinkedList tem um custo deO(1).

Agora, isso não significa que devemos usarLinkedList em todos os lugares como o padrão, uma vez que o custo para recuperar um objeto é o contrário. O custo de chamarget(i) éO(1) no caso deArrayListeO(n) no caso deLinkedList.

4. Conclusão

We’ve seen how to remove the first element of an array in Java. Além disso, vimos como obter o mesmo resultado usando o Java Collections Framework.

Você pode encontrar o código de exemploover on GitHub.