ArrayList
Práca s ArrayList-om:
import java.util.*;
public class Spustac {
/**
* @param args
*/
public static void main(String[] args) {
// Vytvorime ArrayList retazcov
ArrayList<String> slova = new ArrayList<String>();
// Do ArrayList-u pridame retazec Dobry (bude na indexe 0)
slova.add("Dobry");
// Do ArrayList-u pridame retazec Dobry (bude na indexe 1)
slova.add("den");
// Vypiseme obsah ArrayList-u
System.out.println(slova.toString());
// Zmenime obsah ArrayList-u na indexe 1 (zmenime den na vecer)
slova.set(1, "vecer");
// Vypiseme obsah ArrayList-u
System.out.println(slova.toString());
// Vypiseme obsah na indexe 0 v ArrayListe slova
System.out.println(slova.get(0));
// Vypis obsahu ArrayListu pomocou for-cyklu
for (int i = 0; i < slova.size(); i++)
System.out.println(slova.get(i));
}
}
Trieda, ktorej objekty vedia robiť nejakú tú prácu so zoznamom čísel.
import java.util.*;
public class Zoznamar {
/**
* Spocita sucet cisel v zozname cisel
* @param cisla nejaky zoznam cisel
* @return sucet cisel
*/
public int sucet(List<Integer> cisla) {
int sucet = 0;
// Prechadzame zoznamom cisel, ale davame
// si pozor na to, ze na niektorych polickach
// moze byt aj null
for (int i=0; i<cisla.size(); i++)
if (cisla.get(i) != null)
sucet = sucet + cisla.get(i);
return sucet;
}
/**
* Spocita sucet cisel v zozname cisel
* @param cisla nejaky zoznam cisel
* @return sucet cisel
*/
public int sucet2(List<Integer> cisla) {
int sucet = 0;
// Ukazka vyuzitia for-each cyklu
for (Integer cislo: cisla)
if (cislo != null)
sucet = sucet + cislo;
return sucet;
}
}
A k triede Zoznamar
ukážkový "spúšťač":
List<Integer> cisla = new ArrayList<Integer>();
Integer cislo1 = new Integer(2011);
Integer cislo2 = new Integer(2012);
cisla.add(new Integer(10));
cisla.add(cislo1);
cisla.add(null);
cisla.add(cislo2);
cisla.add(cislo2);
cisla.add(15);
Zoznamar z = new Zoznamar();
System.out.println(z.sucet(cisla));
Set
Krátky demonštračný kód k vysvetleniu množiny čísel a využitiu metódy equals
objektov "obaľovacej" triedy Integer
. Výpisy demonštrujú návratovú hodnotu metódy add
.
Set<Integer> mCisla = new HashSet<Integer>();
System.out.println(mCisla.add(new Integer(2011)));
System.out.println(mCisla.add(new Integer(2011)));
System.out.println(mCisla.add(2011));
System.out.println(mCisla.add(2012));
System.out.println(mCisla.size());
System.out.println(mCisla.contains(new Integer(2011)));
Body (Set a equals/hashCode)
Trieda Bod
, ktorej objekty reprezentujú nemeniteľný bod s x-ovou a y-ovou súradnicou. Zakomentovaný je kód metód equals
a hashCode
napísaný počas prednášky. Nezakomentovaný je kód vygenerovaný automaticky prostredím Eclipse
.
public class Bod {
private double x;
private double y;
public Bod(double x, double y) {
super();
this.x = x;
this.y = y;
}
public double getX() {
return x;
}
public double getY() {
return y;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
long temp;
temp = Double.doubleToLongBits(x);
result = prime * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits(y);
result = prime * result + (int) (temp ^ (temp >>> 32));
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Bod other = (Bod) obj;
if (Double.doubleToLongBits(x) != Double.doubleToLongBits(other.x))
return false;
if (Double.doubleToLongBits(y) != Double.doubleToLongBits(other.y))
return false;
return true;
}
// @Override
// public boolean equals(Object obj) {
// if (obj == null)
// return false;
//
// if (obj == this)
// return true;
//
// if (!(obj instanceof Bod))
// return false;
//
// Bod objBod = (Bod)obj;
// return (objBod.getX() == this.getX()) &&
// (objBod.getY() == this.getY());
// }
//
// @Override
// public int hashCode() {
// return 0;
// }
}
Kombinácia Set
-ov a objektov triedy Bod
:
Bod b1 = new Bod(100, 200);
Bod b2 = new Bod(150, 200);
Bod b3 = new Bod(100, 200);
// Test zhodnosti objektov
System.out.println(b1.equals(b2));
System.out.println(b1.equals(b3));
// Hashcode-y objektov
System.out.println(b1.hashCode());
System.out.println(b2.hashCode());
System.out.println(b3.hashCode());
Set<Bod> body = new HashSet<Bod>();
body.add(b1);
body.add(b2);
// Vypis pomocou iteratora
Iterator<Bod> it = body.iterator();
while (it.hasNext()) {
Bod b = it.next();
System.out.println(bod.getX() + ", " + bod.getY());
}
// Vypis pomocou for-each cyklu
for (Bod bod : body) {
System.out.println(bod.getX() + ", " + bod.getY());
}
Map
Príklad využitia Map
-ov na analýzu počtu výskytov slov v textovom súbore (ide o rozšírený zdrojový kód v porovnaní s tým, čo bolo na prednáške).
import java.io.*;
import java.util.*;
public class Spustac {
/**
* @param args
*/
public static void main(String[] args) {
// Vytvorime tabulku, v ktorej pre kazde slovo
// budeme pamatat pocet vyskytov
Map<String, Integer> vyskyty = new HashMap<String, Integer>();
// Klasicke citanie zo suboru po slovach ...
Scanner citac = null;
try {
citac = new Scanner(new File("text.txt"));
while (citac.hasNext()) {
String slovo = citac.next();
// Rozhodneme sa podla toho, ci sa uz slovo vyskytlo,
// t.j. podla toho ci taketo slovo mame v Map-e
// "na lavej strane" medzi klucmi
if (vyskyty.containsKey(slovo))
// ak ano, tak zvysime hodnotu
// pri tomto kluci (slove) o 1
vyskyty.put(slovo, vyskyty.get(slovo) + 1);
else
// ak nie, tak slovo vidime prvy krat
// a nastavime pocet jeho vyskytov na 1
vyskyty.put(slovo, 1);
}
} catch (FileNotFoundException e) {
System.err.println("Strasna chyba");
} finally {
if (citac != null)
citac.close();
}
// Pekny vypis Map-u
System.out.println(vyskyty.toString());
// Nechame si spocitam maximum z hodnot v Map-e, t.j.
// maximum z poctov vyskytov
int maxPocetVyskytov = Collections.max(vyskyty.values());
// Vypiseme vsetky slova, ktore maju taky pocet vyskytov
// ako je vypocitane maximum
for (String slovoKluc : vyskyty.keySet())
if (maxPocetVyskytov == vyskyty.get(slovoKluc))
System.out.println(slovoKluc);
// "Finta" ako vybrat nejaky prvok z neprazdnej mnoziny
if (vyskyty.keySet().size() > 0) {
String nejakyKluc = vyskyty.keySet().iterator().next();
System.out.println(nejakyKluc);
}
// Klasicke najdenie najcastejsieho slova
String najcastejsieSlovo = null;
int najPocetVyskytov = 0;
for (String kluc : vyskyty.keySet())
if (najPocetVyskytov < vyskyty.get(kluc)) {
najcastejsieSlovo = kluc;
najPocetVyskytov = vyskyty.get(kluc);
}
System.out.println(najcastejsieSlovo + " bolo " + najPocetVyskytov);
}
}