Java - řazení objektů

Podobné dokumenty
Typický prvek kolekce pro české řazení

Výčtový typ strana 67

Vytváření a použití knihoven tříd

boolean hasnext() Object next() void remove() Kolekce

Generické programování

typová konverze typová inference

3. Třídy. Základní pojmy objektového programování. Třídy

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Java a XML. 10/26/09 1/7 Java a XML

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

1. Téma 12 - Textové soubory a výjimky

Úvod do programovacích jazyků (Java)

OOPR_05. Případové studie

Java Enum Java, zimní semestr ,2017 1

Deklarace a vytváření

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

20. Projekt Domácí mediotéka

Seminář Java IV p.1/38

Generické typy. Podrobněji: The Java Language Specification ( Third Edition ) , 18

Třídy a objekty -příklady

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

Abstraktní datové typy: zásobník

NPRG031 Programování II 1 / :25:46

NMIN201 Objektově orientované programování 1 / :36:09

7. Dynamické datové struktury

OOPR_05. Případové studie

KTE / ZPE Informační technologie

PŘETĚŽOVÁNÍ OPERÁTORŮ

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

Třídy a dědičnost. A0B36PR1-Programování 1 Fakulta elektrotechnická České vysoké učení technické

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Principy objektově orientovaného programování

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Datové struktury strana 81

9. přednáška - třídy, objekty

Programovací jazyk Java

Teoretické minimum z PJV

Abstraktní třída a rozhraní

Návrh softwarových systém. Návrh softwarových systémů

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Projekty pro výuku programování v jazyce Java

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Dědičnost. seskupování tříd do hierarchie. potomek získá všechny vlastnosti a metody. provádí se pomocí dvojtečky za názvem třídy.

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Java - výjimky. private void vstup() throws IOException {... }

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Algoritmizace a programování

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

Základní pojmy. Matice(řádky, sloupce) Matice(4,6) sloupce

17. Projekt Trojúhelníky

Úvod do programování - Java. Cvičení č.4

Soubor jako posloupnost bytů

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Projekt Škola strana 179

Podmínky na zápočet. Java, zimní semestr

Jazyk C# a platforma.net

8. přednáška: Soubory a proudy

Objektově orientované programování

Výchozí a statické metody rozhraní. Tomáš Pitner, upravil Marek Šabo

Iterator & for cyklus

Přehled probírané látky

Programování v Javě I. Únor 2009

UJO Framework. revoluční architektura beans. verze

RMI Remote Method Invocation

10 Generické implementace

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

5 Rekurze a zásobník. Rekurzivní volání metody

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

8 Třídy, objekty, metody, předávání argumentů metod

Programování v Javě I. Leden 2008

Seminář Java II p.1/43

Java testovací třída

Datové struktury. alg12 1

Distribuované systémy a výpočty

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Regulární výrazy. Vzory

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

ALG 14. Vícedimenzionální data. Řazení vícedimenzionálních dat. Experimentální porovnání řadících algoritmů na vícedimenzionálních datech

11. Dědičnost. Dědičnost strana 103

Simulace. Martin Pergel

9. Polymorfismus a rozhraní

Návrhové vzory Design Patterns

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Návrhové vzory Tvorba objektů

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

IRAE 07/08 Přednáška č. 7. Začátek (head)

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

Java Výjimky Java, zimní semestr

Objekty, třídy, instance

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.

Kolekce, cyklus foreach

Java Řetězce Java, zimní semestr

Funkční objekty v C++.

součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

Transkript:

Java - řazení objektů Kapitola seznamuje se základními principy řazení objektů Klíčové pojmy: Přirozené řazení, absolutní řazení, ideální porovnávatelná třída ŘAZENÍ OBJEKTŮ U objektů není příliš jasné, podle čeho by se měly řadit, většinou mají více atributů, podle kterých lze řadit. Pak mohu volit z více způsobů, jak řadit: 1. řadíme podobně jako primitivní datové typy pomocí metod sort(pole) a binarysearch(), způsob porovnání objektů musí být definován ve třídě těchto objektů = přirozené řazení 2. můžeme si vybrat, podle čeho budeme chtít řadit, u metody sort(pole, jak_řadit) si pomocí druhého parametru můžeme vybrat, podle čeho budeme chtít řadit = absolutní řazení Přirozené řazení natural ordering metody sort() a binarysearch() voláme stejně jako pro primitivní datové typy způsob porovnání objektů musí být popsán ve třídě těchto objektů třída implementuje rozhraní java.lang.comparable s metodou compareto(trida t) rozhraní je generické metoda int compareto(trida t) při porovnání našeho objektu s nějakým objektem-parametrem vrací (this == param) > 0 (this < param) > záporné celé číslo (this > param) > kladné celé číslo rozhraní java.lang.comparable implementují všechny obalové třídy (např. Integer, String,...), nemusíme pro ně tedy definovat metodu compareto(trida t) Příklad 1: seřadíme pole Stringů, metodu compareto(string s) nemusíme definovat, uz je definována Příklad 2: napiš třídu Osoba s atributy jméno, výška a váha a implementující Comparable class Osoba implements Comparable<Osoba> předefinuj metodu public int compareto() tak, aby bylo možné řadit např. podle výšky předefinuj metodu tostring() vytvoř pole Osob a pracuj obdobně jako v předchozích příkladech 2011-12-05 Java - řazení objektů 1/5

class Osoba implements Comparable<Osoba> { String jmeno; int vyska; double vaha; public Osoba(String jmeno, int vyska, double vaha) { this.jmeno = jmeno; this.vyska = vyska; this.vaha = vaha; /* compareto() řadí objekty Osoba podle výšky */ // v tomto případě můžeme psát také: this.vyska - os.vyska public int compareto(osoba os) { if (this.vyska == os.vyska) return 0; else if (this.vyska > os.vyska) return 1; else return -1; public String tostring() { return "Jmeno: " + jmeno + ", vyska: " + vyska + ", vaha: " + vaha; ------------------------------------------------------------------------------------- import java.util.*; public class PrirozeneRazeni { public static void vypis(osoba[] o) { for (int i=0; i<o.length; i++) { System.out.println(i + "..." + o[i].tostring()); Osoba[] clovek = new Osoba[3]; clovek[0] = new Osoba("Eva", 165, 52.8); clovek[1] = new Osoba("Čeněk", 177, 64.2); clovek[2] = new Osoba("Dana", 170, 70.5); Arrays.sort(clovek); Absolutní řazení total ordering implementace rozhraní java.lang.comparator, které má 2 metody: metoda equals(object o) tuto metodu dědí každá třída ze třídy Object, nemusíme def. metoda int compare(trida t1, Trida t2) platí pro ni stejná pravidla jako pro metodu pro českou lokaci použijeme objekt třídy Collator z java.text.* 2011-12-05 Java - řazení objektů 2/5

import java.util.*; import java.text.*; class KomparatorPodleVysky implements Comparator<Osoba> { return os1.vyska - os2.vyska; class KomparatorPodleVahy implements Comparator<Osoba> { return (int)(os1.vaha - os2.vaha); /* pro řazení akcentovaných řetězců */ class KomparatorStringuCesky implements Comparator<String> { /* použijeme objekt třídy Collator pro českou lokaci z java.text.*; */ private Collator col = Collator.getInstance(new Locale("cs", "CZ")); public int compare(string s1, String s2) { return col.compare(s1, s2); class KomparatorPodleJmena implements Comparator<Osoba> { String s1 = os1.jmeno; String s2 = os2.jmeno; return s1.compareto(s2); public class AbsolutniRazeni { public static void vypis(osoba[] os) { for (int i=0; i<os.length; i++) { os[i].vypis(); Osoba[] clovek = new Osoba[3]; clovek[0] = new Osoba("Zita", 165, 52.8); clovek[1] = new Osoba("Hana", 177, 64.2); clovek[2] = new Osoba("Čeněk", 170, 70.5); Arrays.sort(clovek, new KomparatorPodleVysky()); Arrays.sort(clovek, Collections.reverseOrder(new KomparatorPodleVahy())); System.out.println("\nPo seřazení podle váhy sestupně"); Arrays.sort(clovek, new KomparatorPodleJmena()); System.out.println("\nPo seřazení podle jména"); String[] jmeno = new String[clovek.length]; for (int i=0; i<clovek.length; i++) { jmeno[i] = clovek[i].jmeno; Arrays.sort(jmeno, new KomparatorStringuCesky()); 2011-12-05 Java - řazení objektů 3/5

System.out.println("\nPo seřazení podle jména česky"); for (int i=0; i<clovek.length; i++) { System.out.println(jmeno[i]); Ideální porovnávatelná třída implementace rozhraní java.lang.comparable má už ve své definici obsaženy komparátory import java.util.*; class PorovnavatelnaOsoba implements Comparable<PorovnavatelnaOsoba> { String jmeno; int vyska; double vaha; public PorovnavatelnaOsoba(String jmeno, int vyska, double vaha) { this.jmeno = jmeno; this.vyska = vyska; this.vaha = vaha; /* compareto() řadí objekty Osoba podle výšky */ public int compareto(porovnavatelnaosoba os) { return this.vyska - os.vyska; public String tostring() { return "Jmeno: " + jmeno + ", vyska: " + vyska + ", vaha: " + vaha; public void vypis() { System.out.println(this.toString()); public static final Comparator<PorovnavatelnaOsoba> PODLE_VYSKY = new ; return (os1.vyska - os2.vyska); public static final Comparator<PorovnavatelnaOsoba> PODLE_VAHY = new ; return (int)(os1.vaha - os2.vaha); public static final Comparator<PorovnavatelnaOsoba> PODLE_JMENA = new ; return os1.jmeno.compareto(os2.jmeno); 2011-12-05 Java - řazení objektů 4/5

import java.util.*; public class AbsolutniRazeni2 { public static void vypis(porovnavatelnaosoba[] os) { for (int i=0; i<os.length; i++) { os[i].vypis(); PorovnavatelnaOsoba[] clovek = new PorovnavatelnaOsoba[3]; clovek[0] = new PorovnavatelnaOsoba("Zita", 165, 52.8); clovek[1] = new PorovnavatelnaOsoba("Hana", 177, 64.2); clovek[2] = new PorovnavatelnaOsoba("Čeněk", 170, 70.5); Arrays.sort(clovek, PorovnavatelnaOsoba.PODLE_VYSKY); System.out.println(Arrays.asList(clovek)); Arrays.sort(clovek, Collections.reverseOrder(PorovnavatelnaOsoba.PODLE_VAHY)); System.out.println("\nPo seřazení podle váhy sestupně"); System.out.println(Arrays.asList(clovek)); Arrays.sort(clovek, PorovnavatelnaOsoba.PODLE_JMENA); System.out.println("\nPo seřazení podle jména"); System.out.println(Arrays.toString(clovek)); 2011-12-05 Java - řazení objektů 5/5