Upload
morna
View
33
Download
0
Embed Size (px)
DESCRIPTION
Begreber og Redskaber 5. BRP. Collections i Java 1.2. Framework: samling af datastrukturer og algoritmer som generelt værktøj. En ramme til at arbejde med søgning og sortering i datastrukturer. Krav: Objekter skal kunne sammenlignes. Datastrukturer: Lister, mængder, maps - PowerPoint PPT Presentation
Citation preview
Begreber og Redskaber 5
Collections i Java 1.2• Framework: samling af datastrukturer og
algoritmer som generelt værktøj.
• En ramme til at arbejde med søgning og sortering i datastrukturer.
• Krav: Objekter skal kunne sammenlignes.
• Datastrukturer: Lister, mængder, maps
• Operationer: søgning, sortering, mængde- operationer, min, max, gennemløb,..
CollectionsDatastrukturer: (interface)
Algoritmer: (statiske metoder)
Collection
Set List
SortedSet
Map
SortedMap
CollectionsArrays
Implementationer• Set
• List
• Map
• SortedSet SortedMap
TreeSet HashSet
LinkedList ArrayList
HashMap TreeMap
TreeSet TreeMap
Set - List - Map• Set – mængde
– Samling objekter – et objekt kan ikke være med flere gange
• List – liste– Samling objekter i en rækkefølge
• Map – tabel/afbildning– Samling objekter indiceret af andre objekter– Generalisering af lister (hvor index er tal)
Sammenligninginterface Comparable
public int compareTo(Object o)
<0: mindre =0: ens >0 større
f.eks
class Person implements Comparable{
String navn;
public int compareTo(Object o){
return navn.compareTo(((Person) o).navn);
}
Person(String navn){this.navn=navn;}
public String toString(){return navn;}
}
Tabel som listeBrug algoritmerne:Person[] ps ={new Person("Ham"),
new Person("Hende"),new Person("Den anden"),
new Person("En anden")};List l = Arrays.asList(ps); p(l);Collections.sort(l); p(l);Collections.reverse(l); p(l);Collections.shuffle(l); p(l);
UddataTabel:
[Ham, Hende, Den anden, En anden]
Sort:
[Den anden, En anden, Ham, Hende]
Reverse:
[Hende, Ham, En anden, Den anden]
Shuffle:
[En anden, Ham, Hende, Den anden]
Algoritmer: Arrays(Statiske)Operationer på almindelige tabeller
• int binarySearch(type[],type key)• List asList(type[])• boolean equals(type[],type[])• int fill(type[],type val)• void sort(type[])• void sort(type[],Comparator)
• type: Object, int, short, long, float, double, byte, char
Algoritmer: Collections• int binarySearch(List,Object)• Object max(Collection)• Object min(Collection)• void reverse(List)• void shuffle(List)• Set singleton(Object)• List singletonList(Object)• void sort(List)• void sort(List,Comparator)• void copy(List dest, List src)
Datastruktur: Collection• add(Object) tilføj• clear() fjern alle elementer• contains(Object)undersøg om object er med
• isEmpty() undersøg om den er tom
• iterator() gør klar til gennemløb• remove(Object) fjern element• size() antal elementer• toArray() lav tabel af samlingen
Set: Mængder• add(Object) Tilføj – men kun hvis det
ikke
allerede er med
addAll(Collection) Foreningsmængde
removeAll(Collection) Mængdedifferens
retainAll(Collection) Fællesmængde
List: Listeradd(Object) Tilføj til slut i listen
get(index) hent elementset(index,Object) ændr object på plads
index
indexOf(Object) første index for objectlastIndexOf(Object)
subList(int from,int to) lav dellisteaddList(Collection)
Object[] toArray();
Implementationer: Set• Vælg mellem TreeSet og HashSetHashSet den foretrukne
• Elementer i tabel indiceret via hash-funktion– Tilgang til elementer meget hurtig– Vækst kan koste dyrt
TreeSet• Holdes som træstruktur – altid sorteret
– Pladseffektiv
Implementationer: List• Vælg mellem ArrayList og LinkedListArrayList den foretrukne
• Liste holdes i tabel– Adgang til elementer er hurtig,– Vækst kan koste – dyrt at tilføje først i listen
LinkedList• Holdes som dobbelthægtet liste
– Pladseffektiv– Adgang til elementer ret dyrt (med get og set)
Comparable
interface Comparable{int compareTo(Object o)
}
Objekter fra klasser der implementererComparable kan sammenlignes med andre.
Man angiver en ”standard” ordning af sine objekter• For String er det leksikalsk ordning
Comparator
interface Comparator{
int compare (Object o1,Object o2)
}
Et Comparator object kan angive en alternativ
ordning for objekter af en allerede defineret klasse
Flere sorteringer• Sorter efter andre sammenligninger:class NavnLen implements Comparator{ public int compare(Object o1,Object o2){ Person p1 = (Person) o1; Person p2 = (Person) o2; return p1.navn.length()-p2.navn.length();
}}//f.eks cpr nummer, fornavn, efternavn,..
Collections.sort(l,new NavnLen());
Mængde operationerSet s1 = new HashSet(), s2= new HashSet();for(int i=0;i<30;i+=2)s1.add(new Integer(i));for(int i=0;i<30;i+=3)s2.add(new Integer(i));p(s1); p(s2);Set union = new HashSet(s1);union.addAll(s2); p(union);
Set intersection = new HashSet(s1);intersection.retainAll(s2);p(intersection);
Set difference = new HashSet(s1);difference.removeAll(s2);p(difference);
uddata[28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 0]
[27, 24, 21, 18, 15, 12, 9, 6, 3, 0]
[28, 27, 26, 24, 22, 21, 20, 18, 16, 15, 14, 12, 10, 9, 8, 6, 4, 3, 2, 0]
[24, 18, 12, 6, 0]
[28, 26, 22, 20, 16, 14, 10, 8, 4, 2]
Abildninger: Map• Som tabel, men indeks er objekter (F.eks.
tekststrenge)
Map m = .. //X m[]
m.put(a,x); // m[a]=x
y=m.get(a); //y=m[a]
Datastruktur: Mappublic interface Map { Object put(Object key, Object value); Object get(Object key); Object remove(Object key); boolean containsKey(Object key); boolean containsValue(Object value); int size(); boolean isEmpty(); // Bulk Operations void putAll(Map t); void clear(); // Collection Views public Set keySet(); public Collection values();
Implementationer: Map• Vælg mellem TreeMap og HashMapHashMap den foretrukne
• Elementer i tabel indiceret via hash-funktion– Opslag meget hurtig– Vækst kan koste dyrt
TreeMap• Holdes som træstruktur – altid sorteret
– Pladseffektiv
Eksempel Map m=new HashMap();
m.put("madsr",new Person("Mads Rosendahl"));
m.put("troels",new Person("Troels Andreasen"));
p(m);
p(m.get("madsr"));
• Uddata{troels=Troels Andreasen, madsr=Mads Rosendahl}
Mads Rosendahl
Gennemløb• Iteration giver simpel og effektiv måde
at gennemløbe en struktur– next, hasNext, remove
• asList gør at tabellen kan bruges som liste. Ændres listen så ændres tabellen også
Gennemløb List list = new LinkedList();
list.add("hej");
list.add("med");
list.add("dig");
for(int i=0;i<list.size();i++)
p(list.get(i));
Iterator ii= list.iterator();
while(ii.hasNext())
p(ii.next());
Sammenfatning• Mængder, lister, afbildninger
– Træer, hægtede lister, tabeller, hashtabeller
• Søgning, sortering
• Man skal forstå hvordan det underlæggende er implementeret for at kunne vurdere effektivitet.