Um Set é uma coleção não ordenada que (ao contrário de List) garante não conter valores duplicados.
O parâmetro de tipo genérico da interface Set indica o tipo dos elementos contidos no Set:
Set<Integer> ints = Set.of(1, 2, 3);
Set<String> strings = Set.of("alpha", "beta", "gamma");
Set<Object> mixed = Set.of(1, false, "foo");
Repara que o método Set.of() cria uma instância de Set não modificável.
Tentar chamar métodos como add e remove nesta instância dá origem a uma exceção em tempo de execução.
Para criar um Set modificável, tens de instanciar uma classe que implementa a interface Set.
A classe integrada mais utilizada que implementa esta interface é a classe HashSet.
Set<Integer> ints = new HashSet<>();
A interface Set estende as interfaces Collection e Iterable e, por isso, partilha muitos métodos com outros tipos de coleções.
No entanto, uma diferença notável em relação à interface Collection é que métodos como add e remove devolvem um boolean (em vez de void), que indica se o elemento estava contido no conjunto quando esse método foi chamado:
Set<Integer> set = new HashSet<>();
set.add(1);
// => true
set.add(2);
// => true
set.add(1);
// => false
set.size();
// => 2
set.contains(1);
// => true
set.contains(3);
// => false
set.remove(3);
// => false
set.remove(2);
// => true
set.size();
// => 1
A tua nostalgia pelas cartas Blorkemon™️ não dá sinais de abrandar, chegaste mesmo a voltar a colecioná-las e estás a convencer os teus amigos a juntarem-se a ti.
Neste exercício, vais usar a interface Set para te ajudar a gerir a tua coleção, já que as cartas duplicadas não são importantes quando o teu objetivo é obter todas as cartas existentes.
Acabaste de encontrar a tua antiga reserva de cartas Blorkemon™️! A reserva contém imensas cartas duplicadas, por isso está na hora de começares uma nova coleção, removendo as duplicadas.
Queres mesmo que os teus amigos se juntem à tua loucura Blorkemon™️, e a melhor forma é dar o pontapé de saída na coleção deles, dando-lhes uma carta.
Implementa o método newCollection, que transforma uma lista de cartas num Set que representa a tua nova coleção.
GottaSnatchEmAll.newCollection(List.of("Newthree", "Newthree", "Newthree"));
// => {"Newthree"}
Assim que tens uma coleção, ela ganha vida própria e tem de crescer.
Implementa o método addCard, que recebe uma nova carta e o teu conjunto atual de cartas colecionadas.
O método deve adicionar a nova carta à coleção se esta ainda não estiver presente e deve devolver um boolean que indica se a coleção foi atualizada.
Set<String> collection = GottaSnatchEmAll.newCollection("Newthree");
GottaSnatchEmAll.addCard("Scientuna",collection);
// => true
collection.contains("Scientuna");
// => true
Queres mesmo que os teus amigos se juntem à tua loucura Blorkemon™️, por isso está na hora de começar a trocar!
Quando trocas com amigos, nem todas as trocas valem a pena, nem sequer são possíveis. Só deves trocar se tanto tu como o teu amigo tiverem uma carta que o outro não tem.
Implementa o método canTrade, que recebe a tua coleção atual e a coleção de um dos teus amigos.
Deve devolver um boolean que indica se é possível fazer uma troca, seguindo as regras acima.
Set<String> myCollection = Set.of("Newthree");
Set<String> theirCollection = Set.of("Scientuna");
GottaSnatchEmAll.canTrade(myCollection, theirCollection);
// => true
Tu e os teus amigos entusiastas de Blorkemon™️ reúnem-se e interrogam-se sobre quais são as cartas mais comuns.
Implementa o método commonCards, que recebe uma lista de coleções e devolve uma coleção das cartas que todas as coleções têm.
GottaSnatchEmAll.commonCards(List.of(Set.of("Scientuna"), Set.of("Newthree","Scientuna")));
// => {"Scientuna"}
Será que tu e os teus amigos têm, no conjunto, todas as cartas Blorkemon™️?
Implementa o método allCards, que recebe uma lista de coleções e devolve uma coleção com todas as cartas diferentes de todas as coleções combinadas.
GottaSnatchEmAll.allCards(List.of(Set.of("Scientuna"), Set.of("Newthree","Scientuna")));
// => {"Newthree", "Scientuna"}
Inscreve-te no Exercism para aprenderes e dominares Java com 26 conceitos158 exercícios, e mentoria humana real, tudo grátis.