Upload
unc3nzured
View
212
Download
0
Embed Size (px)
DESCRIPTION
qweqwe
Citation preview
1
Collections
Összetett adatstruktúrák
2009. 10. 10.
Collections framework
� „Elıregyártott” interface-ek és osztályok a leggyakoribb összetett adatszerkezetek megvalósítására
� Legtöbbször módosítás nélkül használhatók� Idıt, energiát takaríthatunk meg
� Tesztelt, minıségi és teljesítmény centrikus implementációk
� Nem kell különbözı adatszerkezet API-kat megtanulni
� Támogatja a kód újrafelhasználást
� Package: java.util
2009. 10. 10.
Mibıl áll a keretrendszer
� Collection Interface-ek – Az alap adatszerkezet típusokat definiálják. Ez alkotja a keretrendszer alapját.
� Általános implementációk – A Collection interface-ek elsıdleges implementációi (osztályok).
� „Legacy” implementációk – Korábbi Java verziók adatszerkezet osztályai (Vector and Hashtable) a kompatibilitás miatt.
� „Wrapper” implementációk – Plusz funkciók (pl. szinkronizáció, módosíthatatlanság) megvalósítása.
� Absztrakt implementációk – részleges implementációk, melyek lehetıvé teszik speciális adatszerkezetek kialakítását.
� Algoritmusok – Statikus metódusok alapalgoritmusok megvalósítására, pl. rendezés.
2009. 10. 10.
Az alap interface osztályok
� Collection
� İs interface: objektumok csoportját reprezentálja
� Lehet rendezett vagy rendezetlen csoport
� Lehet ismétlıdéses vagy nem ismétlıdı
� Nincs közvetlen implementációja� A Collection leszármaztatott
interface osztályai � List – rendezett, elemek
szekvenciája� Set – a matematikai halmaz
modellje� SortedSet -
2009. 10. 10.
Az alap interface osztályok
� Map – kulcs-érték párok tárolására szolgál. Azonos kulcs nem megengedett.
� SortedMap – mint a Map de az értékeket növekvı kulcs szerint rendezve tárolja (pl. szótár)
2009. 10. 10.
Fontosabb Collection metódusok
� boolean add(Object o)
� boolean addAll(
Collection c)
� void clear()
� boolean
contains(Object o)
� boolean containsAll(
Collection c)
� boolean isEmpty()
� Iterator iterator()
� boolean remove)Object o)
� boolean
removeAll(Collection c)
� boolean
retainAll(Collection c)
� int size()
� Object[] toArray()
� Object[] toArray(
Object[] a)
2
2009. 10. 10.
Collection interfacepublic interface Collection {
// Basic Operations
int size();
boolean isEmpty();
boolean contains(Object element);
boolean add(Object element); // Optional
boolean remove(Object element); // Optional
Iterator iterator();
// Bulk Operations
boolean containsAll(Collection c);
boolean addAll(Collection c); // Optional
boolean removeAll(Collection c); // Optional
boolean retainAll(Collection c); // Optional
void clear(); // Optional
// Array Operations
Object[] toArray();
Object[] toArray(Object a[]);
}2009. 10. 10.
Módosítás
� A módosítás opcionális operátor� Nem mindegyik implementáció támogatja
� UnsupportedOperationException
2009. 10. 10.
A List interfacepublic interface List extends Collection {
// Positional Access
Object get(int index);
Object set(int index, Object element); // Optional
void add(int index, Object element); // Optional
Object remove(int index); // Optional
abstract boolean addAll(int index, Collection c); // Optional
// Search
int indexOf(Object o);
int lastIndexOf(Object o);
// Iteration
ListIterator listIterator();
ListIterator listIterator(int index);
// Range-view
List subList(int from, int to);
} 2009. 10. 10.
A Set interfacepublic interface Set {
// Basic Operations
int size();
boolean isEmpty();
boolean contains(Object element);
boolean add(Object element); // Optional
boolean remove(Object element); // Optional
Iterator iterator();
// Bulk Operations
boolean containsAll(Collection c);
boolean addAll(Collection c); // Optional
boolean removeAll(Collection c); // Optional
boolean retainAll(Collection c); // Optional
void clear(); // Optional
// Array Operations
Object[] toArray();
Object[] toArray(Object a[]);
}
2009. 10. 10.
A Map interfacepublic interface Map {
// Basic Operations
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();
public Set entrySet();
// Interface for entrySet elements
public interface Entry {
Object getKey();
Object getValue();
Object setValue(Object value);
}
} 2009. 10. 10.
Alap implementációs osztályok
� List� ArrayList – általános célú� LinkedList – bizonyos esetekben gyorsabb
� Set� HashSet – gyors, nincs sorrend� TreeSet – sorrend van
� Map� HashMap - gyors, nincs sorrend� TreeMap – sorrend van
3
2009. 10. 10.
Iterator
� public boolean hasNext() � public Object next()
� Returns:� the next element in the iteration.
� Throws:� NoSuchElementException - iteration has no more
elements.
� public void remove()
2009. 10. 10.
Collection Algoritmusok
� A Collections (!) osztály statikus metódusai� Legtöbbjük a List adatszerkezeten mőködik
� Rendezés – sort� Keverés – shuffle� Adat manipuláció – reverse, fill, copy� Keresés - binarySearch
� Extrémumok keresése – min, max
2009. 10. 10.
Rendezési példa
import java.util.*;
public class Sort {
public static void main(String args[])
{
List l = Arrays.asList(args);
Collections.sort(l);
System.out.println(l);
}
}
2009. 10. 10.
Sort
� Két formája van� sort(List list) – normál sorrend� sort(List list, Comparator c) – komparátor által
meghatározott sorrend
� Comparator interface� int compare(Object a, Object b)� Returns: neg, 0, pos
2009. 10. 10.
Változások az 1.5 verziótól kezdve
� Új interfészek és osztályok� Queue� Vector
2009. 10. 10.
Cast problémák
List myIntList = new LinkedList(); // 1
myIntList.add(new Integer(0)); // 2
Integer x = (Integer)
myIntList.iterator().next(); // 3
� OrString[] s =
(String[])myTextList.toArray();
� Nincs fordításkor ellenırzés!
4
2009. 10. 10.
Generics� Hasonló a C++ template-hez� Paraméterezhetı osztályokat és metódusokat eredményez
� Általánosabb kód� Fordítás közbeni ellenırzés lehetséges
� Collection<E>
� The most commonly used type parameter names are: � E - Element (used extensively by the Java Collections Framework) � K - Key � N - Number � T - Type � V - Value � S,U,V etc. - 2nd, 3rd, 4th types
2009. 10. 10.
Példa/** * Generic version of the Box class. */ public class Box<T> {
private T t; // T stands for "Type" public void add(T t) {
this.t = t; } public T get() {
return t; }
}…Box<Integer> integerBox; …integerBox = new Box<Integer>();
2009. 10. 10.
Új Collection interface
public interface Collection<E> extends Iterable<E> { // Basic operations int size(); boolean contains(Object element); boolean add(E element); //optional boolean remove(Object element); //optional Iterator<E> iterator(); // Bulk operations boolean containsAll(Collection<?> c); boolean addAll(Collection<? extends E> c); //optional boolean retainAll(Collection<?> c); //optional // Array operations Object[] toArray(); <T> T[] toArray(T[] a);
}
2009. 10. 10.
Módosított interfészek
public interface List<E> {
void add(E x);
Iterator<E> iterator();
}
public interface Iterator<E> {
E next();
boolean hasNext();
}
2009. 10. 10.
List<Integer> myIntList = new
LinkedList<Integer>(); // 1’
myIntList.add(new Integer(0)); //2’
Integer x = myIntList.iterator().next();
// 3’