Mapa com Outras Estruturas de Dados
Em geral, não há muito mais a dizer sobre mapas. A informação de que se trata de uma estrutura de dados que armazena informações com base no princípio da chave-valor é suficiente. Mas e se quisermos nos aventurar um pouco e passar uma estrutura de dados como um ArrayList
como valor no mapa?
Passando Estruturas de Dados como Valores em um Mapa
Talvez tenhamos pouca colisão no hashmap, e poderíamos querer armazenar dados de uma maneira ainda mais peculiar.
Por exemplo:
main.java
1234567891011121314151617181920212223242526package com.example; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Main { public static void main(String[] args) { List<String> marketingDepartment = new ArrayList<>(); marketingDepartment.add("Michael"); marketingDepartment.add("Alice"); marketingDepartment.add("Jimmy"); List<String> developerDepartment = new ArrayList<>(); developerDepartment.add("Bob"); developerDepartment.add("John"); developerDepartment.add("Ryan"); Map<String, List<String>> company = new HashMap<>(); company.put("Marketing", marketingDepartment); company.put("Development", developerDepartment); System.out.println("Company: " + company); } }
Aqui está um exemplo de criação de uma estrutura de dados que armazena informações sobre uma determinada empresa. Essa abordagem é algumas vezes utilizada quando se trabalha com bases de dados, mas é aconselhável não abusar dela, pois recuperar dados de tais estruturas de dados pode ser desafiador. Por exemplo, suponha que queremos recuperar o profissional de marketing no índice 1:
main.java
1234567891011121314151617181920212223242526272829package com.example; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Main { public static void main(String[] args) { List<String> marketingDepartment = new ArrayList<>(); marketingDepartment.add("Michael"); marketingDepartment.add("Alice"); marketingDepartment.add("Jimmy"); List<String> developerDepartment = new ArrayList<>(); developerDepartment.add("Bob"); developerDepartment.add("John"); developerDepartment.add("Ryan"); Map<String, List<String>> company = new HashMap<>(); company.put("Marketing", marketingDepartment); company.put("Development", developerDepartment); System.out.println("Company: " + company); String marketerAtIndexOne = company.get("Marketing").get(1); System.out.println("Marketer at index 1 is: " + marketerAtIndexOne); } }
À primeira vista, não parece complicado. Você só precisa usar o método mais uma vez. No entanto, na programação, é crucial evitar a codificação fixa.
O hardcoding é ruim e deve ser evitado de todas as maneiras. Vou mostrar-lhe um exemplo com hardcoding e, em seguida, vamos corrigi-lo juntos:
main.java
123456789101112package com.example public class Main { public static void main(String[] args) { // Hardcoded value double price = 49.99; // Using hardcoded value double discountedPrice = price * 0.8; // 20% discount System.out.println("Discounted Price: " + discountedPrice); } }
Como você pode ver, existe "hardcoding" no código acima. Ao especificar o desconto, utilizamos um número simples. Precisamos armazenar este desconto em uma variável para que possamos reutilizar este valor posteriormente. Vamos melhorar o código acima:
main.java
1234567891011public class Main { public static void main(String[] args) { // Using variables instead of hardcoding double price = 49.99; double discountPercentage = 0.2; // 20% discount // Using variables double discountedPrice = price * (1 - discountPercentage); System.out.println("Discounted Price: " + discountedPrice); } }
Desta forma, obtemos uma variável com o valor do desconto, e em um grande programa no futuro, precisaríamos mudar apenas o valor desta única variável.
Se tivéssemos fixado o valor no código, teríamos que alterar o valor em cada instância, aumentando significativamente o tempo necessário para aprimorar ou editar o código.
Resumo
Em resumo, pode-se dizer que em estruturas de dados, vários tipos de dados, incluindo outras estruturas de dados, podem ser utilizados. Isso adiciona conveniência ao uso dessas estruturas de dados e flexibilidade à sua aplicação. No entanto, não se deve esquecer da complexidade algorítmica, pois é um parâmetro crucial na escrita de uma aplicação. Ao utilizar estruturas de dados dentro de outras estruturas de dados, pode ser bastante fácil cometer erros e complicar significativamente a execução de uma operação específica.
Fique atento a isso, e seu código será excelente!
1. Qual é a complexidade de tempo de um algoritmo que itera por um array de tamanho n
e realiza uma operação de tempo constante em cada elemento?
2. Qual é a principal desvantagem de codificar valores diretamente no código?
3. Considerando dois algoritmos com complexidades temporais O(n log n)
e O(n^2)
, qual deles é geralmente mais eficiente para tamanhos grandes de entrada?
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Can you give an example of how to store an ArrayList as a value in a map?
What are some best practices to avoid hardcoding in such scenarios?
Can you explain more about the potential challenges of retrieving data from nested data structures?
Awesome!
Completion rate improved to 4
Mapa com Outras Estruturas de Dados
Deslize para mostrar o menu
Em geral, não há muito mais a dizer sobre mapas. A informação de que se trata de uma estrutura de dados que armazena informações com base no princípio da chave-valor é suficiente. Mas e se quisermos nos aventurar um pouco e passar uma estrutura de dados como um ArrayList
como valor no mapa?
Passando Estruturas de Dados como Valores em um Mapa
Talvez tenhamos pouca colisão no hashmap, e poderíamos querer armazenar dados de uma maneira ainda mais peculiar.
Por exemplo:
main.java
1234567891011121314151617181920212223242526package com.example; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Main { public static void main(String[] args) { List<String> marketingDepartment = new ArrayList<>(); marketingDepartment.add("Michael"); marketingDepartment.add("Alice"); marketingDepartment.add("Jimmy"); List<String> developerDepartment = new ArrayList<>(); developerDepartment.add("Bob"); developerDepartment.add("John"); developerDepartment.add("Ryan"); Map<String, List<String>> company = new HashMap<>(); company.put("Marketing", marketingDepartment); company.put("Development", developerDepartment); System.out.println("Company: " + company); } }
Aqui está um exemplo de criação de uma estrutura de dados que armazena informações sobre uma determinada empresa. Essa abordagem é algumas vezes utilizada quando se trabalha com bases de dados, mas é aconselhável não abusar dela, pois recuperar dados de tais estruturas de dados pode ser desafiador. Por exemplo, suponha que queremos recuperar o profissional de marketing no índice 1:
main.java
1234567891011121314151617181920212223242526272829package com.example; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Main { public static void main(String[] args) { List<String> marketingDepartment = new ArrayList<>(); marketingDepartment.add("Michael"); marketingDepartment.add("Alice"); marketingDepartment.add("Jimmy"); List<String> developerDepartment = new ArrayList<>(); developerDepartment.add("Bob"); developerDepartment.add("John"); developerDepartment.add("Ryan"); Map<String, List<String>> company = new HashMap<>(); company.put("Marketing", marketingDepartment); company.put("Development", developerDepartment); System.out.println("Company: " + company); String marketerAtIndexOne = company.get("Marketing").get(1); System.out.println("Marketer at index 1 is: " + marketerAtIndexOne); } }
À primeira vista, não parece complicado. Você só precisa usar o método mais uma vez. No entanto, na programação, é crucial evitar a codificação fixa.
O hardcoding é ruim e deve ser evitado de todas as maneiras. Vou mostrar-lhe um exemplo com hardcoding e, em seguida, vamos corrigi-lo juntos:
main.java
123456789101112package com.example public class Main { public static void main(String[] args) { // Hardcoded value double price = 49.99; // Using hardcoded value double discountedPrice = price * 0.8; // 20% discount System.out.println("Discounted Price: " + discountedPrice); } }
Como você pode ver, existe "hardcoding" no código acima. Ao especificar o desconto, utilizamos um número simples. Precisamos armazenar este desconto em uma variável para que possamos reutilizar este valor posteriormente. Vamos melhorar o código acima:
main.java
1234567891011public class Main { public static void main(String[] args) { // Using variables instead of hardcoding double price = 49.99; double discountPercentage = 0.2; // 20% discount // Using variables double discountedPrice = price * (1 - discountPercentage); System.out.println("Discounted Price: " + discountedPrice); } }
Desta forma, obtemos uma variável com o valor do desconto, e em um grande programa no futuro, precisaríamos mudar apenas o valor desta única variável.
Se tivéssemos fixado o valor no código, teríamos que alterar o valor em cada instância, aumentando significativamente o tempo necessário para aprimorar ou editar o código.
Resumo
Em resumo, pode-se dizer que em estruturas de dados, vários tipos de dados, incluindo outras estruturas de dados, podem ser utilizados. Isso adiciona conveniência ao uso dessas estruturas de dados e flexibilidade à sua aplicação. No entanto, não se deve esquecer da complexidade algorítmica, pois é um parâmetro crucial na escrita de uma aplicação. Ao utilizar estruturas de dados dentro de outras estruturas de dados, pode ser bastante fácil cometer erros e complicar significativamente a execução de uma operação específica.
Fique atento a isso, e seu código será excelente!
1. Qual é a complexidade de tempo de um algoritmo que itera por um array de tamanho n
e realiza uma operação de tempo constante em cada elemento?
2. Qual é a principal desvantagem de codificar valores diretamente no código?
3. Considerando dois algoritmos com complexidades temporais O(n log n)
e O(n^2)
, qual deles é geralmente mais eficiente para tamanhos grandes de entrada?
Obrigado pelo seu feedback!