Saudações, futuro(a) aprovado(a)! Professor Gunter Amorim aqui.
Neste artigo, vamos comparar duas das linguagens mais utilizadas no desenvolvimento corporativo: C# e Java. O foco será nas collections, estruturas fundamentais para armazenar, acessar e manipular dados em memória. Entender as semelhanças, diferenças e as boas práticas no uso dessas estruturas pode ser decisivo para seu projeto… ou para sua aprovação naquela prova de concurso!
Collections em Java
Em Java, as collections fazem parte do pacote java.util e estão organizadas em interfaces e classes que representam diferentes tipos de estruturas de dados. Essa API é uma das mais utilizadas do ecossistema Java e segue um modelo de programação baseado em interfaces (como List, Set e Map) e suas implementações concretas.

Principais interfaces:
- List: coleção ordenada que permite elementos duplicados (ArrayList, LinkedList).
- Set: coleção que não permite duplicatas (HashSet, TreeSet).
- Map: armazena pares chave/valor (HashMap, TreeMap).
Exemplo Java:
List<String> nomes = new ArrayList<>();
nomes.add("Ana");
nomes.add("Carlos");
System.out.println(nomes);
Nesse exemplo, criamos uma lista de nomes utilizando ArrayList, que permite inserção ordenada e elementos repetidos. A interface List é ideal quando precisamos manter a ordem dos elementos e permitir duplicatas.
Collections em C#
Em C#, as coleções estão presentes nos namespaces System.Collections, System.Collections.Generic e System.Collections.Concurrent, entre outros. A abordagem é semelhante à do Java, mas com forte uso de genéricos () desde as versões iniciais do .NET Framework, o que garante maior segurança de tipos em tempo de compilação.

Principais tipos:
- List<T>: lista genérica semelhante ao ArrayList de Java.
- HashSet<T>: conjunto que não aceita duplicatas.
- Dictionary<TKey, TValue>: mapa de chave/valor, semelhante ao HashMap.
Exemplo C#:
List<string> nomes = new List<string>();
nomes.Add("Ana");
nomes.Add("Carlos");
Console.WriteLine(string.Join(", ", nomes));
Neste exemplo, criamos uma lista genérica de nomes usando List<T>. Assim como em Java, a ordem de inserção é preservada. O método string.Join é utilizado para imprimir os elementos em sequência, separados por vírgula.
Comparativo: Java x C# – Collections

Característica | Java (java.util) | C# (System.Collections) |
Lista genérica | ArrayList, List<E> | List<T> |
Conjunto sem repetidos | HashSet, TreeSet | HashSet<T> |
Mapa chave/valor | HashMap, TreeMap | Dictionary<TKey, TValue> |
Iteração | Iterator, for-each | foreach, LINQ |
Ordenação automática | TreeSet, TreeMap | SortedSet<T>, SortedList |
Thread-safe (concorrência) | ConcurrentHashMap, etc. | ConcurrentDictionary |
Quando Usar Cada Uma?
Java Collections:
- Ótimo para aplicações multiplataforma e projetos Android.
- Melhor integração com frameworks como Spring e Hibernate.
C# Collections:
- Excelente para aplicações Windows, .NET e APIs Web com ASP.NET.
- LINQ traz poderosas formas de consultar coleções com sintaxe declarativa.
Bora ver como esse assunto é cobrado nos concursos!
1. (FUNDEP/TÉCNICO/UFJF/2022)
Foi requisitado a um técnico que implementasse, dentro de um sistema, uma estrutura capaz de armazenar milhares de registros. Essa estrutura deverá garantir que não haja a presença de registros duplicados.
Para implementar essa estrutura, esse técnico recorreu ao módulo de collections presente na linguagem Java.
Assinale a classe da API de collections mais adequada para resolver o problema.
- A) Vector
- B) TreeMap
- C) Hashtable
- D) LinkedList
- E) HashSet
COMENTÁRIO
A alternativa correta é a letra E. A estrutura HashSet da API de collections do Java é projetada exatamente para armazenar uma coleção de elementos sem duplicatas, sendo ideal para situações em que se deseja garantir unicidade dos registros. Além disso, HashSet oferece bom desempenho para operações de inserção, remoção e verificação de existência, tornando-se adequada para armazenar milhares de registros de forma eficiente. As outras alternativas permitem duplicatas (como Vector, LinkedList) ou têm finalidades diferentes (como TreeMap e Hashtable, que são mapas de chave-valor).
2. (FAURGS/ANALISTA/HCPA/2020)
Sobre Collections Java, considere as afirmações abaixo.
I – Set collections não podem conter elementos duplicados.
II – Map são formados por chave valor, e sua chave não pode ser duplicada.
III – SortedMap mantém seus mapeamentos em ordem crescente de valor.
IV – List pode conter valores duplicados.
Quais estão corretas?
- A) Apenas I.
- B) Apenas III e IV.
- C) Apenas I, II e IV.
- D) Apenas II, III e IV.
- E) I, II, III e IV.
COMENTÁRIO
O gabarito correto é a letra C. A afirmativa III está incorreta. Embora SortedMap mantenha os mapeamentos ordenados por chave, não necessariamente em ordem crescente de valor, como a afirmativa sugere. A ordenação se refere à chave do mapa e pode ser natural ou definida por um Comparator, mas não está relacionada ao valor dos elementos. As demais estão corretas: Set não permite duplicatas (I), Map usa chave-valor com chaves únicas (II) e List aceita valores duplicados (IV). Assim, a afirmativa III induz ao erro ao mencionar a ordenação por valor.
3. (QUESTÃO INÉDITA)
Em C#, qual coleção é usada para garantir que não haja elementos duplicados?
- A) List
- B) Dictionary<TKey, TValue>
- C) HashSet
- D) Queue
COMENTÁRIO
A alternativa correta é a letra C. Em C#, a coleção HashSet<T> é utilizada quando se deseja armazenar elementos sem duplicatas, pois ela garante que cada item adicionado seja único com base no seu valor e no código de hash. As demais coleções não oferecem essa garantia: List permite elementos duplicados, Dictionary<TKey, TValue> impede chaves duplicadas, mas permite valores repetidos, e Queue também permite duplicatas, sendo usada para gerenciamento de ordem de entrada e saída (FIFO). Portanto, HashSet é a escolha apropriada quando o objetivo é evitar elementos repetidos.
Conclusão
Tanto Java quanto C# oferecem coleções poderosas, flexíveis e eficientes. Suas estruturas têm propósitos semelhantes, mas com implementações adaptadas às necessidades e paradigmas de cada ecossistema. Dominar essas estruturas é essencial tanto para programar com mais eficiência quanto para mandar bem em qualquer concurso de TI!
Nos vemos no próximo artigo!
Quer ficar por dentro dos concursos públicos abertos e previstos pelo Brasil? Clique nos links abaixo:
Receba gratuitamente no seu celular as principais notícias do mundo dos concursos. Clique no link abaixo e inscreva-se:
Participe da conversa