Map ja Muut Tietorakenteet
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); } }
Päällisin puolin tämä ei vaikuta monimutkaiselta. Tarvitsee vain käyttää metodia vielä kerran. Ohjelmoinnissa on kuitenkin tärkeää välttää kovakoodausta.
Kovakoodaus on huono käytäntö, ja sitä tulisi välttää kaikin keinoin. Tässä on 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 määritämme alennuksen, käytämme tavallista numeroa. Meidän täytyy tallentaa tämä alennus muuttujaan, jotta voimme käyttää tätä arvoa myöhemmin uudelleen. 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, jossa on alennuksen arvo, ja tulevaisuudessa suuressa ohjelmassa 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 näiden 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 merkittävästi tietyn operaation suorittamista.
Kiinnitä tähän huomiota, 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 kovakoodattujen arvojen käytön suurin haittapuoli koodissa?
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