270 likes | 388 Views
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
E N D
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,..
Collections Collection Datastrukturer: (interface) Algoritmer: (statiske metoder) Map Set List SortedMap SortedSet Collections Arrays
Implementationer TreeSet HashSet • Set • List • Map • SortedSet SortedMap 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)
Sammenligning interface 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 liste Brug 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);
Uddata Tabel: [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: Lister add(Object)Tilføj til slut i listen get(index)hent element set(index,Object) ændr object på plads index indexOf(Object)første index for object lastIndexOf(Object) subList(int from,int to)lav delliste addList(Collection) Object[] toArray();
Implementationer: Set • Vælg mellem TreeSet og HashSet HashSet 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 LinkedList ArrayList 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 implementerer Comparable 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 operationer Set 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: Map public 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 HashMap HashMap 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.