Head First JAVA: 16. Chapter - Kamil-Jankowski/Learning-JAVA GitHub Wiki

Head First JAVA: 16. Chapter

Jukebox

Song:

public class Piosenka implements Comparable<Piosenka>{

    private String tytul;
    private String autor;
    private String ocena;
    private String bpm;

    @Override
    public boolean equals(Object piosenka){
        Piosenka p = (Piosenka) piosenka;
        return getTytul().equals(p.getTytul());
    }

    @Override
    public int hashCode(){
        return tytul.hashCode();
    }

    Piosenka(String t, String a, String o, String b){
        tytul = t;
        autor = a;
        ocena = o;
        bpm = b;
    }

    public String getTytul(){
        return tytul;
    }

    public String getAutor(){
        return autor;
    }

    public String getOcena(){
        return ocena;
    }

    public String getBpm(){
        return bpm;
    }

    public String toString(){
        return tytul;
//        return tytul+": "+autor;
    }

    @Override
    public int compareTo(Piosenka p) {
        return tytul.compareTo(p.getTytul());
    }
}

Jukebox_v1:

import java.io.*;
import java.util.*;

public class SzafaGrajaca1 {

    private ArrayList<String> listaPiosenek = new ArrayList<>();

    public static void main(String[] args) {
        SzafaGrajaca1 szafa = new SzafaGrajaca1();
        szafa.doDziela();
    }

    private void doDziela() {
        pobierzPiosenki();
        System.out.println(listaPiosenek);
        Collections.sort(listaPiosenek);
        System.out.println(listaPiosenek);
    }

    private void pobierzPiosenki() {
        try{
            File plik = new File("ListaPiosenek.txt");
            FileReader czytelnikPliku = new FileReader(plik);
            BufferedReader czytelnik = new BufferedReader(czytelnikPliku);
            String wiersz;
            while ((wiersz = czytelnik.readLine()) != null){
                dodajPiosenke(wiersz);
            }
        }catch(IOException ex){ex.printStackTrace();}
    }

    private void dodajPiosenke(String wierszDoAnalizy) {
        String[] elementy = wierszDoAnalizy.split("/");
        listaPiosenek.add(elementy[0]);
    }
}

Jukebox_v3:

import java.io.*;
import java.util.*;

public class SzafaGrajaca3 {

    ArrayList<Piosenka> listaPiosenek = new ArrayList<>();

    public static void main(String[] args) {
        SzafaGrajaca3 szafa = new SzafaGrajaca3();
        szafa.doDziela();
    }

    private void doDziela() {
        pobierzPiosenki();
        Collections.sort(listaPiosenek);
        System.out.println(listaPiosenek);
    }

    private void pobierzPiosenki() {
        try{
            File plik = new File("ListaPiosenek.txt");
            FileReader czytelnikPliku = new FileReader(plik);
            BufferedReader czytelnik = new BufferedReader(czytelnikPliku);
            String wiersz;
            while((wiersz = czytelnik.readLine())!= null){
                dodajPiosenke(wiersz);
            }
        } catch (Exception e) {e.printStackTrace();}
    }

    private void dodajPiosenke(String wierszDoAnalizy) {
        String[] elementy = wierszDoAnalizy.split("/");
        Piosenka nastepnaPiosenka = new Piosenka(elementy[0], elementy[1], elementy[2], elementy[3]);
        listaPiosenek.add(nastepnaPiosenka);
    }
}

Jukebox_v4:

import java.io.*;
import java.util.*;

public class SzafaGrajaca4 {

    ArrayList<Piosenka> listaPiosenek = new ArrayList<>();

    public static void main(String[] args) {
        SzafaGrajaca4 szafa = new SzafaGrajaca4();
        szafa.doDziela();
    }

    private void doDziela() {
        pobierzPiosenki();
        System.out.println("Nieposortowane:");
        System.out.println(listaPiosenek + "\n");
        Collections.sort(listaPiosenek);
        System.out.println("Kolekcja ArrayList posortowana według tytułu:");
        System.out.println(listaPiosenek + "\n");

        ArtystaCompare komparator = new ArtystaCompare();
        Collections.sort(listaPiosenek, komparator);
        System.out.println("Kolekcja ArrayList posortowana według autora (komparator):");
        System.out.println(listaPiosenek);
    }

    private void pobierzPiosenki() {
        try{
            File plik = new File("ListaPiosenek.txt");
            FileReader czytelnikPliku = new FileReader(plik);
            BufferedReader czytelnik = new BufferedReader(czytelnikPliku);
            String wiersz;
            while((wiersz = czytelnik.readLine())!= null){
                dodajPiosenke(wiersz);
            }
        } catch (Exception e) {e.printStackTrace();}
    }

    private void dodajPiosenke(String wierszDoAnalizy) {
        String[] elementy = wierszDoAnalizy.split("/");
        Piosenka nastepnaPiosenka = new Piosenka(elementy[0], elementy[1], elementy[2], elementy[3]);
        listaPiosenek.add(nastepnaPiosenka);
    }

    private class ArtystaCompare implements Comparator<Piosenka> {
        @Override
        public int compare(Piosenka p1, Piosenka p2) {
            return p1.getAutor().compareTo(p2.getAutor());
        }
    }
}

Jukebox_v5:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class SzafaGrajaca5 {

    ArrayList<Piosenka> listaPiosenek = new ArrayList<>();

    public static void main(String[] args) {
        SzafaGrajaca5 szafa = new SzafaGrajaca5();
        szafa.doDziela();
    }

    private void doDziela() {
        pobierzPiosenki();
        System.out.println(listaPiosenek + "\n");
        Collections.sort(listaPiosenek);
        System.out.println(listaPiosenek + "\n");

        ArtystaCompare komparator = new ArtystaCompare();
        Collections.sort(listaPiosenek, komparator);

        System.out.println(listaPiosenek + "\n");
    }

    private void pobierzPiosenki() {
        try{
            File plik = new File("PelnaListaPiosenek.txt");
            FileReader czytelnikPliku = new FileReader(plik);
            BufferedReader czytelnik = new BufferedReader(czytelnikPliku);
            String wiersz;
            while((wiersz = czytelnik.readLine())!= null){
                dodajPiosenke(wiersz);
            }
        } catch (Exception e) {e.printStackTrace();}
    }

    private void dodajPiosenke(String wierszDoAnalizy) {
        String[] elementy = wierszDoAnalizy.split("/");
        Piosenka nastepnaPiosenka = new Piosenka(elementy[0], elementy[1], elementy[2], elementy[3]);
        listaPiosenek.add(nastepnaPiosenka);
    }

    private class ArtystaCompare implements Comparator<Piosenka> {
        @Override
        public int compare(Piosenka p1, Piosenka p2) {
            return p1.getAutor().compareTo(p2.getAutor());
        }
    }
}

Jukebox_v6:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;

public class SzafaGrajaca6 {

    ArrayList<Piosenka> listaPiosenek = new ArrayList<>();

    public static void main(String[] args) {
        SzafaGrajaca6 szafa = new SzafaGrajaca6();
        szafa.doDziela();
    }

    private void doDziela() {
        pobierzPiosenki();
        System.out.println("Nieposortowane:");
        System.out.println(listaPiosenek + "\n");
        Collections.sort(listaPiosenek);
        System.out.println("Kolekcja ArrayList posortowana według tytułu:");
        System.out.println(listaPiosenek + "\n");

        HashSet<Piosenka> zbiorPiosenek = new HashSet<>();
        zbiorPiosenek.addAll(listaPiosenek);
        System.out.println("HashSet nieposortowany:");
        System.out.println(zbiorPiosenek + "\n");
    }

    private void pobierzPiosenki() {
        try{
            File plik = new File("PelnaListaPiosenek.txt");
            FileReader czytelnikPliku = new FileReader(plik);
            BufferedReader czytelnik = new BufferedReader(czytelnikPliku);
            String wiersz;
            while((wiersz = czytelnik.readLine())!= null){
                dodajPiosenke(wiersz);
            }
        } catch (Exception e) {e.printStackTrace();}
    }

    private void dodajPiosenke(String wierszDoAnalizy) {
        String[] elementy = wierszDoAnalizy.split("/");
        Piosenka nastepnaPiosenka = new Piosenka(elementy[0], elementy[1], elementy[2], elementy[3]);
        listaPiosenek.add(nastepnaPiosenka);
    }
}

Jukebox_v8:

import java.io.*;
import java.util.*;

public class SzafaGrajaca8 {

    ArrayList<Piosenka> listaPiosenek = new ArrayList<>();

    public static void main(String[] args) {
        SzafaGrajaca8 szafa = new SzafaGrajaca8();
        szafa.doDziela();
    }

    private void doDziela() {
        pobierzPiosenki();
        System.out.println("Nieposortowane:");
        System.out.println(listaPiosenek + "\n");
        Collections.sort(listaPiosenek);
        System.out.println("Kolekcja ArrayList posortowana według tytułu:");
        System.out.println(listaPiosenek + "\n");

        TreeSet<Piosenka> zbiorPiosenek = new TreeSet<>();
        zbiorPiosenek.addAll(listaPiosenek);
        System.out.println("TreeSet posortowany według tytułu (unikalne wartości):");
        System.out.println(zbiorPiosenek + "\n");
    }

    private void pobierzPiosenki() {
        try{
            File plik = new File("PelnaListaPiosenek.txt");
            FileReader czytelnikPliku = new FileReader(plik);
            BufferedReader czytelnik = new BufferedReader(czytelnikPliku);
            String wiersz;
            while((wiersz = czytelnik.readLine())!= null){
                dodajPiosenke(wiersz);
            }
        } catch (Exception e) {e.printStackTrace();}
    }

    private void dodajPiosenke(String wierszDoAnalizy) {
        String[] elementy = wierszDoAnalizy.split("/");
        Piosenka nastepnaPiosenka = new Piosenka(elementy[0], elementy[1], elementy[2], elementy[3]);
        listaPiosenek.add(nastepnaPiosenka);
    }
}

Exercises

Sorting:

package cwiczenia;

public class Gora {
    private String nazwa;
    private int wysokosc;

    Gora(String n, int w){
        nazwa = n;
        wysokosc = w;
    }

    String getNazwa(){
        return nazwa;
    }

    int getWysokosc(){
        return wysokosc;
    }

    public String toString(){

        return nazwa + " " + wysokosc;
    }
}
package cwiczenia;
import java.util.*;

public class SortowanieGor {

    private LinkedList<Gora> listaGor = new LinkedList<>();

    public static void main(String[] args) {
        SortowanieGor atlas = new SortowanieGor();
        atlas.sortujGory();
    }

    private void sortujGory() {
        dodajGory();
        System.out.println("Bez sortowania: \n" + listaGor);
        NameComparator nazwaKomparator = new NameComparator();
        Collections.sort(listaGor, nazwaKomparator);                            // poprzedni sposób sortowania
        System.out.println("Według nazw: \n" + listaGor);
        HeightComparator wysokoscKomparator = new HeightComparator();
        listaGor.sort(wysokoscKomparator);                                      // nowy sposób sortowania
        System.out.println("Według wysokosci malejąco: \n" + listaGor);
    }

    private void dodajGory() {
        listaGor.add(new Gora("Kasprowy", 1987));
        listaGor.add(new Gora("Koscielec", 2155));
        listaGor.add(new Gora("Swinica", 2301));
        listaGor.add(new Gora("Rysy", 2499));
    }

    class NameComparator implements Comparator<Gora>{
        @Override
        public int compare(Gora g1, Gora g2) {
            return g1.getNazwa().compareTo(g2.getNazwa());
        }
    }

    private class HeightComparator implements Comparator<Gora> {
        @Override
        public int compare(Gora g1, Gora g2) {
            return g2.getWysokosc() - g1.getWysokosc();
        }
    }
}

Books:

package cwiczenia;
import java.util.*;

public class ZbiorTestowy {
    public static void main(String[] args) {
        ZbiorTestowy zbior = new ZbiorTestowy();
        zbior.doDziela();
    }

    private void doDziela() {
        Ksiazka k1 = new Ksiazka("Ostatnie życzenie", "Andrzej Sapkowski");
        Ksiazka k2 = new Ksiazka("Silmarillion", "J.R.R. Tolkien");
        Ksiazka k3 = new Ksiazka("Inferno", "Dan Brown");
        utworzPosortowanyZbiorKsiazek(k1, k2, k3);
    }

    private void utworzPosortowanyZbiorKsiazek(Ksiazka k1, Ksiazka k2, Ksiazka k3) {
        TreeSet<Ksiazka> zbiorKsiazek = new TreeSet<>();
        zbiorKsiazek.add(k1);
        zbiorKsiazek.add(k2);
        zbiorKsiazek.add(k3);
        System.out.println("Posortowany zbiór książek: \n" + zbiorKsiazek);
    }

    private class Ksiazka implements Comparable{
        private String tytul;
        private String autor;

        Ksiazka (String t, String a){
            tytul = t;
            autor = a;
        }

        @Override
        public String toString(){
            return autor + ": " + tytul;
        }

        @Override
        public int compareTo(Object o) {
            Ksiazka k = (Ksiazka) o;
            return tytul.compareTo(k.tytul);
        }
    }
}

HashMap:

package cwiczenia;
import java.util.*;

public class TestMap {
    public static void main(String[] args) {
        HashMap<String, Integer> wyniki = new HashMap<>();

        wyniki.put("Kasia", 42);
        wyniki.put("Berta", 343);
        wyniki.put("Sabina", 420);

        System.out.println(wyniki);
        System.out.println(wyniki.get("Berta"));
    }
}

Generics

Test 1:

package cwiczenia.typyOgolne;

public class TestTypowOgolnych1 {
    public static void main(String[] args) {
        new TestTypowOgolnych1().doDziela();
    }

    private void doDziela() {
        Zwierze[] zwierzeta = {new Pies(), new Kot(), new Pies()};
        Pies[] psy = {new Pies(), new Pies(), new Pies()};
        nakarmZwierzeta(zwierzeta);
        System.out.println();
        nakarmZwierzeta(psy);
    }

    private void nakarmZwierzeta(Zwierze[] zwierzeta) {
        for(Zwierze z: zwierzeta){
            z.jedz();
        }
    }
}

Test 2:

package cwiczenia.typyOgolne;
import java.util.*;

public class TestTypowOgolnych2 {
    public static void main(String[] args) {
        new TestTypowOgolnych2().doDziela();
    }

    private void doDziela() {
        ArrayList<Zwierze> zwierzeta = new ArrayList<>();
        zwierzeta.add(new Pies());
        zwierzeta.add(new Kot());
        zwierzeta.add(new Pies());
        nakarmZwierzeta(zwierzeta);

//        ArrayList<Pies> psy = new ArrayList<>();
//        psy.add(new Pies());
//        psy.add(new Pies());
//        psy.add(new Pies());
//        System.out.println("");
//        nakarmZwierzeta(psy);                         // to nie zadziała
    }

    private void nakarmZwierzeta(ArrayList<Zwierze> zwierzeta) {
        for(Zwierze z: zwierzeta){
            z.jedz();
        }
    }
}

Test 3:

package cwiczenia.typyOgolne;
import java.util.*;

public class TestTypowOgolnych3 {
    public static void main(String[] args) {
        new TestTypowOgolnych3().doDziela();
    }

    private void doDziela() {
        ArrayList<Zwierze> zwierzeta = new ArrayList<>();
        List<Zwierze> lista = zwierzeta;
        zwierzeta.add(new Pies());
        zwierzeta.add(new Kot());
        zwierzeta.add(new Pies());
        nakarmZwierzeta(zwierzeta);
        nakarmZwierzeta2(zwierzeta);
        System.out.println(lista);

        ArrayList<Pies> psy = new ArrayList<>();
        psy.add(new Pies());
        psy.add(new Pies());
        psy.add(new Pies());
        System.out.println();
        nakarmZwierzeta(psy);
        nakarmZwierzeta2(psy);
    }

    private void nakarmZwierzeta(ArrayList<? extends Zwierze> zwierzeta) {
        for(Zwierze z: zwierzeta){
            z.jedz();
        }
    }
    private <T extends Zwierze> void nakarmZwierzeta2(ArrayList<T> zwierzeta) {             // te deklaracje metod mają to samo znaczenie
        for(Zwierze z: zwierzeta){
            z.jedz();
        }
    }
}

Animals:

package cwiczenia.typyOgolne;

abstract class Zwierze {
    void jedz(){
        System.out.println("zwierz wcina");
    }
}
package cwiczenia.typyOgolne;

class Kot extends Zwierze {
}
package cwiczenia.typyOgolne;

class Pies extends Zwierze{
}

⚠️ **GitHub.com Fallback** ⚠️