Negocio

Como iterar conjunto em Java

Conjuntos Java

Um conjunto em Java é uma coleção de itens, cada um com o mesmo tipo de dados e nenhum deles duplicado. Esta lição cobrirá dois conjuntos principais: um é ordenado e o outro não. Set faz parte de uma classe Java maior, chamada Coleções. Set é uma interface na classe de coleções, mas para usar qualquer um dos métodos dentro dela, precisamos importar os pacotes de utilitários Java.

Este código deve estar antes de qualquer declaração de classe em seu código:

import java.util. *;

Ok, agora que importamos o utilitário, podemos começar a usá-lo.

Criação e iteração no conjunto

Primeiro, vamos criar nosso conjunto. Estaremos criando um HashSet , que é um conjunto verdadeiramente não ordenado. Além disso, um TreeSet manterá os itens em ordem crescente.

Em nosso exemplo, começaremos com um HashSet e então faremos um loop por ele. Este código mostra como criar um novo Set usando a interface Set. Você define o tipo, fornece uma variável para o conjunto e, em seguida, diz ao Java para criar um novo HashSet:

// cria nosso Set 
Set <String> trees = new HashSet ();
trees.add ("Larch");
trees.add ("Pinheiro");
trees.add ("Bálsamo");
trees.add ("Birch");
trees.add ("Ash");

Uma maneira de percorrer um Set é o fiel loop ‘for’. Podemos percorrer rapidamente cada item do Conjunto e exibir o resultado. O código para isso se parece com este:

// itera sobre o conjunto 
para (String s: trees) {
  System.out.println ("Tree =" + s);
}

O loop ‘for’, neste caso, estabelece o tipo (String), um (s) contador (es) e o Conjunto (árvores). Quando o programa é executado, obtemos uma impressão de nossas árvores, como pode ser visto aqui:

Saída do conjunto de loop Java

Observe como a ordem não corresponde à ordem em que entramos nas árvores. Isso destaca a natureza não ordenada do HashSet. Na verdade, até que compilemos e executemos o programa, não saberemos em que ordem a lista estará.

Isso não significa que a ordem seja aleatória. A ordem é realmente determinada por Java. Uma vez que o conjunto é construído e compilado, a ordem (ou desordenar, por assim dizer) é definida. Você não tem controle sobre ele, mas pode executar e executar novamente o código e obter a mesma (des) ordem.

Há outro loop que podemos usar, conhecido como loop ‘forEach’, que é uma variação do loop ‘for’. Ele está disponível apenas nas versões 8 e mais recentes do Java, portanto, se você estiver usando uma versão mais antiga, isso não funcionará. O loop usa o método forEach e é acessado referenciando primeiro o Conjunto (árvores). Você pode então exibir a saída, embora o código seja um pouco diferente do que vimos antes.

tree.forEach (System.out :: println);

Quando é executado, a mesma saída exibe:

Java para cada saída do conjunto iterativo

Agora é a parte divertida! Faremos uso da interface Java Iterator , que permite percorrer listas e conjuntos. Para usá-lo, você precisa criar uma nova instância do Iterator.

Em seguida, usamos um loop ‘while’ que é executado enquanto o conjunto tem um próximo item para procurar. A interface Iterator nos fornece um método, hasNext (), que retorna false se não houver mais membros. Dentro do loop ‘while’, exibimos algumas informações e o valor do conjunto. Para obter o valor, o método é next (). O tipo de dados para a interface Iterator deve corresponder ao tipo de dados do conjunto.

Iterator <String> ir = trees.iterator (); 
while (ir.hasNext ()) {
  System.out.println ("Resultado do iterador =" + ir.next ());
}

Quando isso é executado, obtemos uma saída semelhante, que ainda não está ordenada, e tem a seguinte aparência:

Saída do conjunto de iteração Java

Um Conjunto Diferente

Agora que cobrimos a iteração por meio de um HashSet, vamos dar uma olhada em como isso ficaria com um TreeSet. Lembre-se de que nossa saída para o HashSet foi um tanto aleatória. Novamente, criaremos a mesma lista, exceto que o conjunto agora é um TreeSet e, em seguida, faremos um loop sobre o conjunto usando o Iterator. Além disso, mudamos algumas árvores para que não ficassem em ordem.

// cria nosso Set 
Set <String> trees = new TreeSet ();
trees.add ("Larch");
trees.add ("Pinheiro");
trees.add ("Bálsamo");
trees.add ("Birch");
trees.add ("Ash");
Iterator <String> ir = trees.iterator ();
while (ir.hasNext ()) {
  System.out.println ("Resultado do iterador =" + ir.next ());
}

Quando este código for processado, você notará que a exibição é realmente exibida em ordem crescente, assim:

Java define a saída TreeSet

Isso funciona com outros tipos de dados também. Considere este TreeSet configurado com tipos de dados Double:

Definir pontuações <Double> = new TreeSet (); 
score.add (1,59343);
scores.add (.9934847);
score.add (-3,3444);
Iterator <Double> ir = scores.iterator ();
while (ir.hasNext ()) {
 System.out.println ("Pontuação:" + ir.next ());
}

Assim, a saída é crescente:

Saída de conjuntos de árvores duplos

Embora os loops ‘for’ sejam iteradores aceitáveis ​​de um conjunto, a interface Iterator faz parte da classe Collections e, portanto, é um ótimo ajuste com conjuntos. Se você usar HashSet ou TreeSet, o código é o mesmo para percorrê-los, apenas esteja ciente de que o TreeSet estará em ordem crescente.

Resumo da lição

Para recapitular, um conjunto em Java é uma coleção de objetos. É realmente uma interface que faz parte da classe Coleções. Um HashSet não é ordenado, enquanto um TreeSet é armazenado em ordem crescente. Podemos iterar sobre esses conjuntos usando um loop ‘for’, um loop ‘forEach’ ou fazendo uso da interface Iterator , que permite alternar entre listas e conjuntos. Iterator fornece métodos para determinar o próximo elemento e acessar elementos no conjunto.