Collection, Set, List
Map
Date
Calendar
DateFormat
Locale
ResouceBundle
Interfaces:
java.util.Collection
java.util.List
java.util.Set
java.util.SortedSet
java.util.Map
java.util.SortedMap
java.util.Iterator
Klassen:
java.util.LinkedList
java.util.Vector
java.util.ArrayList
java.util.HashMap
java.util.Hashtable
java.util.TreeMap
Collection, Set, List
Collection:
public interface Collection public boolean add(Object o) public boolean remove(Object o) public boolean contains(Object o) public Iterator iterator()
Iterator:
public interface Iterator public boolean hasNext() public Object next()
List: Duplikate sind zugelassen
public interface List extends Collection public boolean add(Object o) public Object get() public boolean remove(Object o) public boolean contains(Object o) public Iterator iterator()
Set: keine Duplikate enthalten
public interface Set extends Collection public boolean add(Object o) public boolean remove(Object o) public boolean contains(Object o) public Iterator iterator()
Comparator: Vergleichsmethode bei Sorted*
public interface Comparator int compare(Object o1, Object o2) boolean equals(Object obj)
Map, SortedMap
Map: (Schlüssel,Wert)-Paare
public interface Map public boolean put(Object key, Object value) public Object get(Object key) public boolean remove(Object key) public boolean containsKey(Object key) public boolean containsValue(Object value) public Set keySet()
Objekte, die als Schlüssel (key) verwendet werden, müssen folgende Bedingungen erfüllen:
equals()
sollte für inhaltlich gleiche Objekte
true
liefern,
d.h. equals()
von Object
muss
in der Regel überschrieben werden
denn das von Object
geerbte equals()
liefert nur für das selbe Objekt true
hashCode()
muss für Objekte, für die
equals()
wahr ist, auch die gleiche Zahl liefern
d.h. falls a.equals(b) == true
muss
a.hashCode() == b.hashCode()
sein
denn das von Object
geerbte hashCode()
liefert nur für das selbe Objekt die gleiche int-Zahl
import java.util.HashMap; import java.util.Iterator; import java.util.Set; import java.util.Map.Entry; public class Konten { private HashMap konten = null; public Konten() { konten = new HashMap(); } public void buche(int nummer, double betrag) { Integer n = new Integer(nummer); Object v = konten.get(n); double s = 0.0; if (v instanceof Double) { s = ((Double)v).doubleValue(); } konten.put(n, new Double(s+betrag)); } public double stand(int nummer) { Integer n = new Integer(nummer); Object v = konten.get(n); Double s = null; if (v instanceof Double) { s = (Double) v; } else { s = new Double(0.0); } return s.doubleValue(); } public String toString(int nummer) { String s = ""; s += "<Konto"; s += " nummer='" + nummer + "'"; s += " stand='" + stand(nummer) + "'"; s += " />"; return s; } public String toString() { String s = ""; s += "<Konten >\n"; for (Iterator i = (konten.keySet()).iterator(); i.hasNext(); ) { Object e = i.next(); Integer n = (Integer)e; int nummer = n.intValue(); s += toString(nummer) + "\n"; } s += "</Konten>"; return s; } }
Collections: statische Hilfsmethoden
public class Collections extends Object static int binarySearch(List list, Object key) static int binarySearch(List list, Object key, Comparator c) static void copy(List dest, List src) static void fill(List list, Object obj) static int indexOfSubList(List source, List target) static int lastIndexOfSubList(List source, List target) static Object max(Collection coll) static Object max(Collection coll, Comparator comp) static Object min(Collection coll) static Object min(Collection coll, Comparator comp) static List nCopies(int n, Object o) static boolean replaceAll(List list, Object oldVal, Object newVal) static void reverse(List list) static Comparator reverseOrder() static void rotate(List list, int distance) static void shuffle(List list) static void shuffle(List list, Random rnd) static void sort(List list) static void sort(List list, Comparator c) static void swap(List list, int i, int j)
import java.util.HashMap; import java.util.Map; import java.util.Iterator; public class Konten { private Map<Integer,Double> konten = null; public Konten() { konten = new HashMap<Integer,Double>(); } public void buche(int nummer, double betrag) { double s = 0.0; if ( konten.get(nummer) != null ) { s = konten.get(nummer); } konten.put(nummer, (s+betrag) ); } public double stand(int nummer) { double s = konten.get(nummer); return s; } public String toString(int nummer) { String s = ""; s += "<Konto"; s += " nummer='" + nummer + "'"; s += " stand='" + stand(nummer) + "'"; s += " />"; return s; } public String toString() { String s = ""; s += "<Konten >\n"; for (Iterator<Integer> i = (konten.keySet()).iterator(); i.hasNext(); ) { int nummer = i.next(); s += toString(nummer) + "\n"; } s += "</Konten>"; return s; } }
java.util.Date
stellt Datum und Uhrzeiten dar.
Die Zeit wird als Millisekunden seit dem 1. Januar 1970, 0 Uhr gespeichert.
Fast alle Methoden sind 'deprecated'.
public class Date extends Object implements Serializable, Cloneable, Comparable public Date() public Date(long millis) public long getTime() public void setTime(long millis) public boolean after(Date a) public boolean before(Date a) public boolean equals(Date a)
Beispiel: Zeitstempel in einem Buchungssatz
(vonKonto, nachKonto, Betrag, Zeitstempel)
import java.util.Date; public class BuchungDate implements BuchungInterface { final static int NO_KONTO = -1; protected int vonKonto = NO_KONTO; protected int nachKonto = NO_KONTO; protected double betrag = 0.0; protected Date zeitStempel = null; public BuchungDate(int von, int nach, double b) { vonKonto = von; nachKonto = nach; betrag = b; zeitStempel = new Date(); } public int getVonKonto() { return vonKonto; } public int getNachKonto() { return nachKonto; } public double getBetrag() { return betrag; } public Date getZeit() { return zeitStempel; } public boolean vor(BuchungInterface b) { return zeitStempel.before( b.getZeit() ); } public boolean nach(BuchungInterface b) { return zeitStempel.after( b.getZeit() ); } public String toString() { String s = "<BuchungDate"; s += " von='"+vonKonto+"'"; s += " nach='"+vonKonto+"'"; s += " betrag='"+betrag+"'"; s += " zeit='"+zeitStempel+"'"; s += " />"; return s; } }
das verwendete Interface:
import java.util.Date; public interface BuchungInterface { public int getVonKonto(); public int getNachKonto(); public double getBetrag(); public Date getZeit(); public boolean vor(BuchungInterface b); public boolean nach(BuchungInterface b); }
Test Programm
static void testDate() { Screen sc = new Screen(); KeyBoard kb = new KeyBoard(); String s = ""; BuchungInterface a = new BuchungDate(1,9,50.0); try { sc.println("press enter to continue"); s = kb.readLine(); } catch(IOException e) { } BuchungInterface b = new BuchungDate(9,2,100.0); sc.println("a = " + a); sc.println("b = " + b); boolean t = a.vor(b); sc.println("t = " + t); t = a.nach(b); sc.println("t = " + t); sc.println(); }
Ausgabe
press enter to continue a = <BuchungDate von='1' nach='9' betrag='50.0' zeit='Sun Dec 16 17:02:49 CET 2001' /> b = <BuchungDate von='9' nach='2' betrag='100.0' zeit='Sun Dec 16 17:02:50 CET 2001' /> t = true t = false
java.util.Calendar
stellt Datum und Uhrzeit unabhängig
von den o.g. Millisekunden dar.
Objekte der abstrakten Klasse können nicht per Konstruktor erzeugt werden,
sondern es gibt eine Methode getInstance()
die ein
Objekt der Klasse liefert.
public abstract class Calendar extends Object implements Serializable, Cloneable public static Calendar getInstance() public static Calendar getInstance(TimeZone t, Locale l) public final Date getTime() public final void setTime(Date d) public final TimeZone getTimeZone() public final void setTimeZone(TimeZone t) public final int get(int feld) public final void set(int feld, int wert) public final void add(int feld, int wert) public final void roll(int feld, int wert) public static final int YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, ..., DAY_OF_YEAR, ... public final void set(int jahr, int monat, int tag) public final void set(int jahr, int monat, int tag, int stunde) public final void set(int jahr, int monat, int tag, int stunde, int minute) public final void set(int jahr, int monat, int tag, int stunde, int minute, int sekunde) public boolean after(Object a) public boolean before(Object a) public boolean equals(Object a)
java.util.GregorianCalendar
erweitert die
Klasse Calendar
.
import java.util.Date; import java.util.Calendar; import java.text.DateFormat; public class BuchungCalendar implements BuchungInterface { final static int NO_KONTO = -1; protected int vonKonto = NO_KONTO; protected int nachKonto = NO_KONTO; protected double betrag = 0.0; protected Calendar zeitStempel = null; protected DateFormat zeitFormat = null; public BuchungCalendar(int von, int nach, double b) { vonKonto = von; nachKonto = nach; betrag = b; zeitStempel = Calendar.getInstance(); zeitStempel.setTime( new Date() ); zeitFormat = DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.FULL); } public int getVonKonto() { return vonKonto; } public int getNachKonto() { return nachKonto; } public double getBetrag() { return betrag; } public Date getZeit() { return zeitStempel.getTime(); } public boolean vor(BuchungInterface b) { return zeitStempel.before( b.getZeit() ); } public boolean nach(BuchungInterface b) { return zeitStempel.after( b.getZeit() ); } public String toString() { String s = "<" + getClass().getName(); s += " von='"+vonKonto+"'"; s += " nach='"+nachKonto+"'"; s += " betrag='"+betrag+"'"; s += " zeit='"+zeitFormat.format(zeitStempel.getTime())+"'"; s += " />"; return s; } }
java.text.DateFormat
formatiert Datum und Uhrzeit
entsprechend einer Sprach- und Landes-Einstellung
java.util.Locale
.
getInstance()
die ein
Objekt der Klasse liefern.
public abstract class DateFormat extends Format public static final DateFormat getInstance() public static final DateFormat getDateInstance() public static final DateFormat getTimeInstance() public static final DateFormat getDateTimeInstance() public static final DateFormat getDateInstance(int dStyle) public static final DateFormat getTimeInstance(int tStyle) public static final DateFormat getDateTimeInstance(int dStyle, int tStyle) public static final DateFormat getDateInstance(int dStyle, Locale l) public static final DateFormat getTimeInstance(int tStyle, Locale l) public static final DateFormat getDateTimeInstance(int dStyle, int tStyle, Locale l) public static final int DEFAULT, FULL, LONG, MEDIUM, SHORT public final String format(Date d) public final StringBuffer format(Object n_d, StrinBuffer to, FieldPosition f) public final Date parse(String s) public final Object parseObject(String s, ParsePosition p)
Beispiele: Verwendung von Calender und DateFormat
static void testCalendar() { Screen sc = new Screen(); KeyBoard kb = new KeyBoard(); String s = ""; BuchungInterface a = new BuchungCalendar(1,9,50.0); try { sc.println("press enter to continue"); s = kb.readLine(); } catch(IOException e) { } BuchungInterface b = new BuchungCalendar(9,2,100.0); sc.println("a = " + a); sc.println("b = " + b); boolean t = a.vor(b); sc.println("t = " + t); t = a.nach(b); sc.println("t = " + t); sc.println(); }
Ausgabe
press enter to continue a = <BuchungCalendar von='1' nach='9' betrag='50.0' zeit='Sonntag, 16. Dezember 2001 17.02 Uhr CET' /> b = <BuchungCalendar von='9' nach='2' betrag='100.0' zeit='Sonntag, 16. Dezember 2001 17.02 Uhr CET' /> t = false t = false
java.util.Locale
stellt Sprache, Land und weitere Feinheiten dar.
Es existieren eine ganze Reihe von vordefinierten Locale-Objekten.
public final class Locale extends Object implements Cloneable, Serializable public Locale(String sprace, String land) public Locale(String sprace, String land, String feinheit) public static final Locale GERMANY, US, FRANCE, JAPAN, CHINA, ... public static final Locale GERMAN, ENGLISH, FRENCH, JAPANESE, CHINESE, ... public static Locale getDefault() public static void setDefault(Locale l) public final String getDisplayCountry() public final String getDisplayLanguage() public final String getDisplayName() public final String getDisplayVariant()
import java.util.Locale; import java.text.DateFormat; public class BuchungCalendarFrance extends BuchungCalendar { public BuchungCalendarFrance(int von, int nach, double b) { super(von,nach,b); zeitFormat = DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.FULL, Locale.FRANCE); } }
static void testCalendarFrance() { Screen sc = new Screen(); KeyBoard kb = new KeyBoard(); String s = ""; BuchungInterface a = new BuchungCalendarFrance(1,9,50.0); BuchungInterface b = new BuchungCalendarFrance(9,2,100.0); sc.println("a = " + a); sc.println("b = " + b); boolean t = a.vor(b); sc.println("t = " + t); sc.println(); }
import java.util.Locale; import java.text.DateFormat; public class BuchungCalendarItaly extends BuchungCalendar { public BuchungCalendarItaly(int von, int nach, double b) { super(von,nach,b); zeitFormat = DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.FULL, Locale.ITALY); } }
import java.util.Locale; import java.text.DateFormat; public class BuchungCalendarJapan extends BuchungCalendar { public BuchungCalendarJapan(int von, int nach, double b) { super(von,nach,b); zeitFormat = DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.FULL, Locale.JAPAN); } }
import java.util.Locale; import java.text.DateFormat; public class BuchungCalendarUS extends BuchungCalendar { public BuchungCalendarUS(int von, int nach, double b) { super(von,nach,b); zeitFormat = DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.FULL, Locale.US); } }
static void testCalendarUS() { Screen sc = new Screen(); KeyBoard kb = new KeyBoard(); String s = ""; BuchungInterface a = new BuchungCalendarUS(1,9,50.0); BuchungInterface b = new BuchungCalendarUS(9,2,100.0); sc.println("a = " + a); sc.println("b = " + b); boolean t = a.vor(b); sc.println("t = " + t); sc.println(); }
Ausgabe
a = <BuchungCalendarUS von='1' nach='9' betrag='50.0' zeit='Sunday, December 16, 2001 5:02:51 PM CET' /> b = <BuchungCalendarUS von='9' nach='2' betrag='100.0' zeit='Sunday, December 16, 2001 5:02:51 PM CET' /> t = false
Beispiel: Mischen von Date und Calendar
static void testError() { Screen sc = new Screen(); KeyBoard kb = new KeyBoard(); String s = ""; BuchungInterface a = new BuchungDate(1,9,50.0); BuchungInterface b = new BuchungCalendar(9,2,100.0); BuchungInterface c = new BuchungCalendarFrance(2,3,50.0); BuchungInterface d = new BuchungCalendarUS(3,5,99.0); BuchungInterface e = new BuchungCalendarItaly(6,2,15.0); sc.println("a = " + a); sc.println("b = " + b); sc.println("c = " + c); sc.println("d = " + d); sc.println("e = " + e); boolean t; t = a.vor(b); sc.println("a.vor(b) = " + t); t = a.vor(c); sc.println("a.vor(c) = " + t); t = e.vor(c); sc.println("e.vor(c) = " + t); t = d.vor(a); sc.println("d.vor(a) = " + t); sc.println(); }
Ausgabe
a = <BuchungDate von='1' nach='1' betrag='50.0' zeit='Sun Dec 16 17:02:51 CET 2001' /> b = <BuchungCalendar von='9' nach='2' betrag='100.0' zeit='Sonntag, 16. Dezember 2001 17.02 Uhr CET' /> c = <BuchungCalendarFrance von='2' nach='3' betrag='50.0' zeit='dimanche 16 décembre 2001 17 h 02 CET' /> d = <BuchungCalendarUS von='3' nach='5' betrag='99.0' zeit='Sunday, December 16, 2001 5:02:51 PM CET' /> e = <BuchungCalendarItaly von='6' nach='2' betrag='15.0' zeit='domenica 16 dicembre 2001 17.02.51 CET' /> a.vor(b) = false a.vor(c) = true e.vor(c) = false d.vor(a) = false
java.util.ResourceBundle
dient zur Verknüpfung von
Locale und den entsprechenden Texten/Objekten einer Anwendung.
public abstract class ResourceBundle extends Object public static final ResourceBundle getBundle(String anwendung) public static final ResourceBundle getBundle(String anwendung, Locale l) public final String getString(String key) public final Object getObject(String key)
java.util.ListResourceBundle
public abstract class ListResourceBundle extends ResourceBundle protected abstract Object[][] getContents()
Aufbau der Resource Namen:
baseClassName_language_country_variant
BuchungResource, BuchungResource_en, BuchungResource_en_us
Beispiel: Einsatz im Buchungssatz
import java.util.ListResourceBundle; public class BuchungResource extends ListResourceBundle { public Object[][] getContents() { return texte; } static final Object[][] texte = { { "von", "von" }, { "nach", "nach" }, { "betrag", "betrag" }, { "zeit", "zeit" } }; }
import java.util.ListResourceBundle; public class BuchungResource_en extends ListResourceBundle { public Object[][] getContents() { return texte; } static final Object[][] texte = { { "von", "from" }, { "nach", "to" }, { "betrag", "amount" }, { "zeit", "time" } }; }
import java.util.ListResourceBundle; public class BuchungResource_fr extends ListResourceBundle { public Object[][] getContents() { return texte; } static final Object[][] texte = { { "von", "de" }, { "nach", "vers" }, { "betrag", "montant" }, { "zeit", "temps" } }; }
import java.util.ListResourceBundle; public class BuchungResource_it extends ListResourceBundle { public Object[][] getContents() { return texte; } static final Object[][] texte = { { "von", "di" }, { "nach", "a" }, { "betrag", "importo" }, { "zeit", "tempo" } }; }
import java.util.ResourceBundle; import java.util.Locale; import java.text.DateFormat; public class BuchungCalendarResource extends BuchungCalendar { public BuchungCalendarResource(int von, int nach, double b) { super(von,nach,b); zeitFormat = DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.FULL); } public String toString() { ResourceBundle b = ResourceBundle.getBundle("BuchungResource"); String s = "<" + getClass().getName(); s += " " + b.getString("von") + "='" + vonKonto + "'"; s += " " + b.getString("nach") + "='" + nachKonto + "'"; s += " " + b.getString("betrag") + "='" + betrag + "'"; s += " " + b.getString("zeit") + "='" + zeitFormat.format(zeitStempel.getTime()) + "'"; s += " />"; return s; } }
Test Programm:
static void testCalendarResource() { Screen sc = new Screen(); KeyBoard kb = new KeyBoard(); String s = ""; BuchungInterface a = new BuchungCalendarResource(1,9,50.0); sc.println("a = " + a); Locale.setDefault( Locale.FRANCE ); BuchungInterface b = new BuchungCalendarResource(9,2,100.0); sc.println("b = " + b); Locale.setDefault( Locale.US ); BuchungInterface c = new BuchungCalendarResource(3,4,99.0); sc.println("c = " + c); Locale.setDefault( Locale.ITALY ); BuchungInterface d = new BuchungCalendarResource(5,2,130.0); sc.println("d = " + d); Locale.setDefault( Locale.GERMANY ); BuchungInterface e = new BuchungCalendarResource(4,7,60.0); sc.println("e = " + e); boolean t; t = a.vor(b); sc.println("a.vor(b) = " + t); t = a.vor(c); sc.println("a.vor(c) = " + t); t = e.vor(c); sc.println("e.vor(c) = " + t); t = d.vor(a); sc.println("d.vor(a) = " + t); sc.println(); }
Ausgabe
a = <BuchungCalendarResource von='1' nach='9' betrag='50.0' zeit='Sonntag, 16. Dezember 2001 17.02 Uhr CET' /> b = <BuchungCalendarResource de='9' vers='2' montant='100.0' temps='dimanche 16 décembre 2001 17 h 02 CET' /> c = <BuchungCalendarResource from='3' to='4' amount='99.0' time='Sunday, December 16, 2001 5:02:51 PM CET' /> d = <BuchungCalendarResource di='5' a='2' importo='130.0' tempo='domenica 16 dicembre 2001 17.02.51 CET' /> e = <BuchungCalendarResource von='4' nach='7' betrag='60.0' zeit='Sonntag, 16. Dezember 2001 17.02 Uhr CET' /> a.vor(b) = false a.vor(c) = false e.vor(c) = false d.vor(a) = false
import java.util.Vector; import java.util.Iterator; public class KontenTest { public static void main(String[] args) { testBuchung(); } static void testBuchung() { Screen sc = new Screen(); Konten konten = new Konten(); sc.println("konten = \n" + konten); Vector buchListe = new Vector(); for (int i = 0; i < 10; i++) { int v = (new Double(Math.random()*100.0)).intValue() % 10; int n = (new Double(Math.random()*100.0)).intValue() % 10; if ( v != n ) { double d = Math.floor((new Double(Math.random()*1000.0)).doubleValue()); BuchungInterface b = new BuchungCalendarResource(v,n,d); sc.println("" + b); buchListe.add( b ); } } for (Iterator i = buchListe.iterator(); i.hasNext(); ) { BuchungInterface b = (BuchungInterface) i.next(); int v = b.getVonKonto(); int n = b.getNachKonto(); double d = b.getBetrag(); konten.buche(v, -d); konten.buche(n, d); } sc.println("konten = \n" + konten); } }
© Universität Mannheim, Rechenzentrum, 1998-2004.
Heinz KredelLast modified: Sun Jan 30 21:04:32 CET 2005