Map Muiden Tietorakenteiden Kanssa
Yleisesti ottaen kartoista ei ole paljoa enempää kerrottavaa. Tieto siitä, että kyseessä on tietorakenne, joka tallentaa tietoa avain-arvo-periaatteella, riittää. Mutta entä jos haluat kokeilla jotain erikoisempaa ja asettaa tietorakenteen, kuten ArrayList, arvoksi karttaan?
Tietorakenteiden käyttäminen arvoina kartassa
Ehkäpä hashmapissa on liian vähän törmäyksiä, ja haluat tallentaa tietoa vieläkin erikoisemmalla tavalla.
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); } }
Tässä on esimerkki tietorakenteen luomisesta, joka tallentaa tietoja tietystä yrityksestä. Tätä lähestymistapaa käytetään joskus työskenneltäessä tietokantojen kanssa, mutta sitä ei suositella liiallisesti, sillä tiedon hakeminen tällaisista tietorakenteista voi olla haastavaa. Oletetaan esimerkiksi, että haluamme hakea markkinoijan indeksissä 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); } }
Aluksi tämä ei vaikuta monimutkaiselta. Tarvitsee vain käyttää metodia uudelleen. Ohjelmoinnissa on kuitenkin tärkeää välttää kovakoodausta.
Kovakoodaus on huono käytäntö, ja sitä tulisi välttää kaikissa tilanteissa. Tässä esimerkki kovakoodauksesta, jonka jälkeen korjaamme sen yhdessä:
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); } }
Kuten huomaat, yllä olevassa koodissa on kovakoodaus. Kun alennus määritellään, käytetään tavallista numeroa. Tämä alennus tulisi tallentaa muuttujaan, jotta voimme käyttää arvoa uudelleen myöhemmin. Parannetaan yllä olevaa koodia:
Main.java
12345678910111213package com.example; public 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); } }
Tällä tavalla saadaan muuttuja, joka sisältää alennusarvon, ja suuressa ohjelmassa tulevaisuudessa tarvitsisi muuttaa vain tämän yhden muuttujan arvoa.
Jos arvo olisi kovakoodattu, se pitäisi muuttaa jokaisessa esiintymässä, mikä lisäisi huomattavasti aikaa koodin parantamiseen tai muokkaamiseen.
Yhteenveto
Yhteenvetona voidaan todeta, että tietorakenteissa voidaan käyttää erilaisia tietotyyppejä, mukaan lukien muita tietorakenteita. Tämä helpottaa tietorakenteiden käyttöä ja lisää sovelluksen joustavuutta. Kuitenkin algoritminen monimutkaisuus on tärkeä huomioitava tekijä sovellusta kirjoitettaessa. Kun käytetään tietorakenteita muiden tietorakenteiden sisällä, on melko helppoa tehdä virheitä ja monimutkaistaa tietyn operaation suorittamista merkittävästi.
Pidä tämä mielessä, niin koodisi on erinomaista!
1. Mikä on algoritmin aikavaativuus, joka käy läpi taulukon, jonka koko on n, ja suorittaa jokaiselle alkiolle vakioaikaisen operaation?
2. Mikä on suurin haittapuoli arvojen kovakoodauksessa suoraan koodiin?
3. Kun annetaan kaksi algoritmia, joiden aikavaativuudet ovat O(n log n) ja O(n^2), kumpi on yleensä tehokkaampi suurilla syötteillä?
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
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?
Mahtavaa!
Completion arvosana parantunut arvoon 4
Map Muiden Tietorakenteiden Kanssa
Pyyhkäise näyttääksesi valikon
Yleisesti ottaen kartoista ei ole paljoa enempää kerrottavaa. Tieto siitä, että kyseessä on tietorakenne, joka tallentaa tietoa avain-arvo-periaatteella, riittää. Mutta entä jos haluat kokeilla jotain erikoisempaa ja asettaa tietorakenteen, kuten ArrayList, arvoksi karttaan?
Tietorakenteiden käyttäminen arvoina kartassa
Ehkäpä hashmapissa on liian vähän törmäyksiä, ja haluat tallentaa tietoa vieläkin erikoisemmalla tavalla.
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); } }
Tässä on esimerkki tietorakenteen luomisesta, joka tallentaa tietoja tietystä yrityksestä. Tätä lähestymistapaa käytetään joskus työskenneltäessä tietokantojen kanssa, mutta sitä ei suositella liiallisesti, sillä tiedon hakeminen tällaisista tietorakenteista voi olla haastavaa. Oletetaan esimerkiksi, että haluamme hakea markkinoijan indeksissä 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); } }
Aluksi tämä ei vaikuta monimutkaiselta. Tarvitsee vain käyttää metodia uudelleen. Ohjelmoinnissa on kuitenkin tärkeää välttää kovakoodausta.
Kovakoodaus on huono käytäntö, ja sitä tulisi välttää kaikissa tilanteissa. Tässä esimerkki kovakoodauksesta, jonka jälkeen korjaamme sen yhdessä:
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); } }
Kuten huomaat, yllä olevassa koodissa on kovakoodaus. Kun alennus määritellään, käytetään tavallista numeroa. Tämä alennus tulisi tallentaa muuttujaan, jotta voimme käyttää arvoa uudelleen myöhemmin. Parannetaan yllä olevaa koodia:
Main.java
12345678910111213package com.example; public 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); } }
Tällä tavalla saadaan muuttuja, joka sisältää alennusarvon, ja suuressa ohjelmassa tulevaisuudessa tarvitsisi muuttaa vain tämän yhden muuttujan arvoa.
Jos arvo olisi kovakoodattu, se pitäisi muuttaa jokaisessa esiintymässä, mikä lisäisi huomattavasti aikaa koodin parantamiseen tai muokkaamiseen.
Yhteenveto
Yhteenvetona voidaan todeta, että tietorakenteissa voidaan käyttää erilaisia tietotyyppejä, mukaan lukien muita tietorakenteita. Tämä helpottaa tietorakenteiden käyttöä ja lisää sovelluksen joustavuutta. Kuitenkin algoritminen monimutkaisuus on tärkeä huomioitava tekijä sovellusta kirjoitettaessa. Kun käytetään tietorakenteita muiden tietorakenteiden sisällä, on melko helppoa tehdä virheitä ja monimutkaistaa tietyn operaation suorittamista merkittävästi.
Pidä tämä mielessä, niin koodisi on erinomaista!
1. Mikä on algoritmin aikavaativuus, joka käy läpi taulukon, jonka koko on n, ja suorittaa jokaiselle alkiolle vakioaikaisen operaation?
2. Mikä on suurin haittapuoli arvojen kovakoodauksessa suoraan koodiin?
3. Kun annetaan kaksi algoritmia, joiden aikavaativuudet ovat O(n log n) ja O(n^2), kumpi on yleensä tehokkaampi suurilla syötteillä?
Kiitos palautteestasi!