Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Map ja Muut Tietorakenteet | Osio
Javan Perustietorakenteet

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

Main.java

1234567891011121314151617181920212223242526
package 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

Main.java

1234567891011121314151617181920212223242526272829
package 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

Main.java

123456789101112
package 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

Main.java

12345678910111213
package 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ä?

question mark

Mikä on algoritmin aikavaativuus, joka käy läpi taulukon, jonka koko on n, ja suorittaa jokaiselle alkiolle vakioaikaisen operaation?

Valitse oikea vastaus

question mark

Mikä on kovakoodattujen arvojen käytön suurin haittapuoli koodissa?

Valitse oikea vastaus

question mark

Kun annetaan kaksi algoritmia, joiden aikavaativuudet ovat O(n log n) ja O(n^2), kumpi on yleensä tehokkaampi suurilla syötteillä?

Valitse oikea vastaus

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 16

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Osio 1. Luku 16
some-alt