Lista Java – Lista em Java

Lista Java é uma coleção ordenada. Lista Java é uma interface que estende a interface Collection. Lista Java fornece controle sobre a posição onde você pode inserir um elemento. Você pode acessar elementos pelo seu índice e também pesquisar elementos na lista.

Lista Java

Alguns dos pontos importantes sobre Lista Java são;

  • A interface Lista Java é um membro do Framework de Coleções Java.
  • A Lista permite adicionar elementos duplicados.
  • A Lista permite ter elementos ‘null’.
  • A interface Lista possui muitos métodos padrão no Java 8, como replaceAll, sort e spliterator.
  • Os índices da Lista começam em 0, assim como arrays.
  • A Lista suporta Genéricos e devemos usá-la sempre que possível. Usar Genéricos com Lista evitará ClassCastException em tempo de execução.

Diagrama de Classe Lista Java

A interface List do Java estende a interface Collection. A interface Collection estende a interface Iterable. Algumas das implementações de List mais usadas são ArrayList, LinkedList, Vector, Stack, CopyOnWriteArrayList. AbstractList fornece uma implementação esquelética da interface List para reduzir o esforço na implementação de List.

Métodos da Lista Java

Alguns dos métodos úteis da List Java são;

  1. int size(): para obter o número de elementos na lista.
  2. boolean isEmpty(): para verificar se a lista está vazia ou não.
  3. boolean contains(Object o): Retorna true se esta lista contiver o elemento especificado.
  4. Iterator<E> iterator(): Retorna um iterador sobre os elementos nesta lista na sequência adequada.
  5. Object[] toArray(): Retorna uma matriz contendo todos os elementos nesta lista na sequência apropriada
  6. boolean add(E e): Anexa o elemento especificado ao final desta lista.
  7. boolean remove(Object o): Remove a primeira ocorrência do elemento especificado desta lista.
  8. boolean reterTodos(Collection<?> c): Mantém apenas os elementos nesta lista que estão contidos na coleção especificada.
  9. void limpar(): Remove todos os elementos da lista.
  10. E get(int index): Returns the element at the specified position in the list.
  11. E set(int index, E element): Replaces the element at the specified position in the list with the specified element.
  12. ListIterator<E> iteradorLista(): Retorna um iterador de lista sobre os elementos na lista.
  13. List<E> subLista(int fromIndex, int toIndex): Retorna uma visão da parte desta lista entre o fromIndex especificado, inclusivo, e o toIndex, exclusivo. A lista retornada é suportada por esta lista, então mudanças não estruturais na lista retornada são refletidas nesta lista, e vice-versa.

Alguns dos métodos padrão adicionados à Lista no Java 8 são;

  1. padrão void substituirTudo(UnaryOperator<E> operador): Substitui cada elemento desta lista pelo resultado da aplicação do operador a esse elemento.
  2. padrão void ordenar(Comparator<super E> c): Ordena esta lista de acordo com a ordem induzida pelo Comparator especificado.
  3. padrão Spliterator<E> spliterator(): Cria um Spliterator sobre os elementos nesta lista.

Array Java para Lista

Podemos usar a classe Arrays para obter a visualização do array como lista. No entanto, não poderemos fazer nenhuma modificação estrutural na lista; isso resultará em java.lang.UnsupportedOperationException. Portanto, a melhor maneira é usar o loop for para criar a lista iterando sobre o array. Abaixo está um exemplo simples mostrando como converter um array Java em lista corretamente.

package com.journaldev.examples;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ArrayToList {

	public static void main(String[] args) {
		
		String[] vowels = {"a","e","i","o","u"};
		
		List vowelsList = Arrays.asList(vowels);
		System.out.println(vowelsList);
		
		/**
		 * List is backed by array, we can't do structural modification
		 * Both of the below statements will throw java.lang.UnsupportedOperationException
		 */
		//vowelsList.remove("e");
		//vowelsList.clear();
				
		//usando loop for para copiar elementos do array para a lista, seguro para modificação da lista
		List myList = new ArrayList<>();
		for(String s : vowels){
			myList.add(s);
		}
		System.out.println(myList);
		myList.clear();
	}

}

Escolha qualquer um dos métodos acima com base nos requisitos do seu projeto.

Java Lista para Array

A simple example showing the correct way to convert a list to array.

package com.journaldev.examples;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ListToArray {

	public static void main(String[] args) {

		List letters = new ArrayList();

		//exemplo de adição
		letters.add("A");
		letters.add("B");
		letters.add("C");
		
		//converter lista para array
		String[] strArray = new String[letters.size()];
		strArray = letters.toArray(strArray);
		System.out.println(Arrays.toString(strArray)); //will print "[A, B, C]"
	}

}

Ordenação de Lista Java

Há duas maneiras de ordenar uma lista. Podemos usar a classe Collections para ordenação natural ou podemos usar o método List sort() e usar nosso próprio Comparator para ordenação. Abaixo está um exemplo simples para ordenação de lista Java.

package com.journaldev.examples;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class ListSortExample {

	public static void main(String[] args) {
		
		List ints = new ArrayList<>();
		Random random = new Random();
		for (int i = 0; i < 10; i++) ints.add(random.nextInt(1000));
		
		//ordenando naturalmente usando a classe Collections
		Collections.sort(ints);
		System.out.println("Natural Sorting: "+ints);
		
		//Minha ordenação personalizada, ordem reversa
		ints.sort((o1,o2) -> {return (o2-o1);});
		System.out.println("Reverse Sorting: "+ints);
	}
}

A sample output is given below. Since I am using Random for generating list elements, it will be different every time.

Natural Sorting: [119, 273, 388, 450, 519, 672, 687, 801, 812, 939]
Reverse Sorting: [939, 812, 801, 687, 672, 519, 450, 388, 273, 119]

Operações Comuns em Lista Java

As operações mais comuns realizadas em listas Java são adicionar, remover, definir, limpar, tamanho etc. Abaixo está um exemplo simples de lista Java mostrando o uso comum dos métodos.

package com.journaldev.examples;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ListExample {

	public static void main(String args[]) {
		List vowels= new ArrayList();
		
		//exemplo de adição
		vowels.add("A");
		vowels.add("I");
		
		//vamos inserir E entre A e I
		vowels.add(1,"E");
		System.out.println(vowels);
		
		List list = new ArrayList();
		list.add("O");list.add("U");
		
		//anexando elementos da lista às letras
		vowels.addAll(list);
		System.out.println(vowels);
		
		//exemplo de limpeza para esvaziar a lista
		list.clear();
		
		//exemplo de tamanho
		System.out.println("letters list size = "+vowels.size());
		
		//exemplo de definição
		vowels.set(2, "E");
		System.out.println(vowels);
		
		//exemplo de subLista
		vowels.clear();vowels.add("E"); vowels.add("E");vowels.add("I"); vowels.add("O");
		list = vowels.subList(0, 2);
		System.out.println("letters = "+vowels+", list = "+list);
		vowels.set(0, "A");
		System.out.println("letters = "+vowels+", list = "+list);
		list.add("U");
		System.out.println("letters = "+vowels+", list = "+list);
		
		
	}

}

A saída do exemplo de programa de lista Java acima é;

[A, E, I]
[A, E, I, O, U]
letters list size = 5
[A, E, E, O, U]
letters = [E, E, I, O], list = [E, E]
letters = [A, E, I, O], list = [A, E]
letters = [A, E, U, I, O], list = [A, E, U]

Iterador de Lista Java

Aqui está um exemplo simples mostrando como iterar sobre uma lista em Java.

package com.journaldev.examples;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ListIteratorExample {

	public static void main(String[] args) {

		List list = new ArrayList<>();
		for(int i=0; i<5; i++) list.add(i);
		
		Iterator iterator = list.iterator();
		
		//iteração simples
		while(iterator.hasNext()){
			int i = (int) iterator.next();
			System.out.print(i + ", ");
		}
		System.out.println("\n"+list);
		
		//modificação da lista usando iterador
		iterator = list.iterator();
		while(iterator.hasNext()){
			int x = (int) iterator.next();
			if(x%2 ==0) iterator.remove();
		}
		System.out.println(list);
		
		//alterando a estrutura da lista enquanto itera
		iterator = list.iterator();
		while(iterator.hasNext()){
			int x = (int) iterator.next(); //ConcurrentModificationException here
			if(x==1) list.add(10);
		}
	}

}

A saída do programa de iterador de lista Java acima é;

0, 1, 2, 3, 4, 
[0, 1, 2, 3, 4]
[1, 3]
Exception in thread "main" java.util.ConcurrentModificationException
	at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
	at java.util.ArrayList$Itr.next(ArrayList.java:851)
	at com.journaldev.examples.ListIteratorExample.main(ListIteratorExample.java:34)

Isso é tudo para um breve resumo sobre Listas em Java. Espero que esses exemplos de Listas Java ajudem você a começar a programar com coleções de Listas.

Source:
https://www.digitalocean.com/community/tutorials/java-list